アプリのデプロイに.shスクリプトを使用したい。このスクリプトは私のホームサーバー(Ubuntu 15.10サーバー)にあり、実行可能としてマークされています。このスクリプトへのアクセスはsshを介して行われ、このチュートリアルを使用して、そのスクリプトを実行するsshログインを設定しました。したがって、基本的には呼び出すだけでssh deployer@XXX.com someArguments
、スクリプトをsomeArguments
パラメーターとして実行します。ユーザーdeployer
はuid = 0を持っているので、基本的にはroot
(これは将来変更される予定です。正常に機能するまで、アクセス許可の問題を解消するためだけに設定しました)。
そして、ここが物事がトリッキーになるところです。スクリプトは/usr/bin/env: php: No such file or directory
atコマンドを報告します/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.gz
php5-cli
パッケージがインストールされ、最新バージョン$PATH
含む/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
which 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
。「次のこと」をどのように確認しましたか?スクリプトでそれらをチェックすることをお勧めします。これにより、envの最終的なオーバーライドとサニテーションを見つけることができます。