2017-09-13 17 views
1

私のautodeployスクリプトに奇妙な問題があります。nginx/php-fpm execによって呼び出されたときにnpmが実行されない

基本的にはhttpでトリガーされたときにnpm installnpm run buildのようないくつかのコマンドで他のシェルスクリプトを実行するphpスクリプトです。これは、PHPのスクリプトがhttp nginx/php-fpmから呼び出された場合を除いてすべて動作します。この場合のnpmコマンドは実行されません。

私はこの問題を示すために、簡単な例レポを作成しました:https://github.com/Kasheftin/npm-bug

私達はちょうどtest.shシェルコマンドを実行しますtest.phpを持っている:私たちはちょうどnpm run testを実行test.shを持って

<?php 
    exec("/home/www/tests/npm-bug/test.sh > /home/www/tests/npm-bug/test.log"); 

をコマンド:最後に、我々は、以下のコマンドでpackage.jsonいる

#!/bin/bash 
cd /home/www/tests/npm-bug 
npm run test 

"scripts": { 
    "test": "echo \"Hello World!\"" 
} 

npm run testの結果は次のようになります。

> [email protected] test /home/www/tests/npm-bug 
> echo "Hello World!" 

Hello World! 

お知らせ最後の行 - それはpackage.jsonでechoコマンドの結果です。 ./test.shコマンドの場合も同じ結果が表示されます。 php test.phpコマンドを実行した後には、同じことがtest.logに入ります。

しかし、私は、HTTPからtest.phpををトリガーするとき、私は最後の文字列が存在しないことのみ

> [email protected] test /home/www/tests/npm-bug 
> echo "Hello World!" 

お知らせを、得る、NPMコマンドが実行されませんでした。

また、私は私のnginxの中に、この場所のルールを持っている:これはすべての非常にスタンダールのようだ、nginxのとphp7.0-FPMは、箱から出してすぐです

location = /npm-test { 
    root /home/www/tests/npm-bug; 
    rewrite ^(.*)$ /test.php break; 
    include snippets/fastcgi-php.conf; 
    fastcgi_pass unix:/run/php/php7.0-fpm.sock; 
} 

、PHPの設定は全く同じですcliとfpmのために。環境の異なる2台のサーバーでチェックされています。

答えて

2

解決するのは興味深い問題でした。だからあなたが使用するときのことです。

exec("/home/www/tests/npm-bug/test.sh > /home/www/tests/npm-bug/test.log"); 

すべてのエラーをマスクします。あなたが実際に

exec("/home/www/tests/npm-bug/test.sh > /home/www/tests/npm-bug/test.log 2>&1"); 

のようにそれを行う必要がありますそして今、あなたはそれが理由を把握するためにいつか連れて行ってくれた大きな誤り

npm ERR! Linux 4.4.0-66-generic 
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "run" "test" 
npm ERR! node v4.2.6 
npm ERR! npm v3.5.2 
npm ERR! file sh 
npm ERR! path sh 
npm ERR! code ELIFECYCLE 
npm ERR! errno ENOENT 
npm ERR! syscall spawn sh 
npm ERR! [email protected] test: `sh -c 'echo "Hello World!"'` 
npm ERR! spawn sh ENOENT 
npm ERR! 
npm ERR! Failed at the [email protected] test script 'sh -c 'echo "Hello World!"''. 
npm ERR! Make sure you have the latest version of node.js and npm installed. 

が表示されます。そこで、シェルファイルにenvステートメントを追加しました。

USER=vagrant 
PWD=/var/www/html/npm-bug 
SHLVL=1 
HOME=/home/vagrant 
OLDPWD=/home/vagrant/nginx/html/npm-bug 
_=/usr/bin/env 

PATH変数が定義されていないことがわかります。これが問題でした。私は私の端末がecho $PATHに示したパスを取っ

export PATH=...... 

シェルスクリプトでパス変数を追加して、今ではまた、FPMから

+0

あなたは、今日の私のスーパーヒーローです、おかげでたくさんの作品! – Kasheftin

関連する問題