我想使用.sh脚本来部署我的应用程序。该脚本在我的家庭服务器(Ubuntu 15.10服务器)上,标记为可执行文件。使用ssh可以访问此脚本,使用本教程,我已经设置了运行该脚本的ssh登录。因此,基本上我只是调用ssh deployer@XXX.com someArguments它,并someArguments以参数的形式运行我的脚本。用户的deployeruid = 0,因此基本上是uid = 0 root(将来会对此进行更改,我将其设置为仅消除权限问题,直到可以正常工作为止)。
这就是事情变得棘手的地方。该脚本/usr/bin/env: php: No such file or directory在命令中报告/bin/composer install(使用Composer)。我越看那个脚本,事情就越怪异。在此行之前,还调用了/bin/composer self-update和/bin/composer -V,它们都可以正常运行并显示正确的输出。
我检查了以下内容:
/usr/bin/env php -v显示正确的PHP版本(与相同/usr/bin/php -v)whereis php显示php: /usr/bin/php /usr/local/bin/php /usr/share/man/man1/php.1.gzphp5-cli已安装软件包和最新版本$PATH包含/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gameswhich env显示/usr/bin/env
我还尝试了以下操作:
- 直接
bash deploy.sh在root用户下运行脚本(因为它与该用户相同)-完美运行而没有错误 - 直接运行失败的命令-完美无误
所以在我看来,这是非常具体的情况,为什么此命令不起作用。我花了12个小时来调试它,但在这里没有主意。
PS:/usr/bin/env: node: No such file or directory存在bower install(使用Bower)时发生类似的错误(),但运行时(使用NPM)则不会发生类似的错误。npm install
sh deploy和bash deploy两个给出相同的结果
/usr/bin/env > environment.txt

sh deploy而不是bash deploy(也许是一些bashism)。您如何检查“ 以下事项 ”?我建议在脚本中检查它们,以便您可以发现最终的覆盖和环境污染。