it-swarm-ja.com

永遠に、bash、Apache、phpで奇妙な振る舞い

foreverを使用していくつかのnode.jsスクリプトを実行しています。

私はそれらをwww-dataユーザーとして開始しました(つまり、www-data @ serverとしてsshロギングを介して、forever start myapp.jsと入力するなど)。

わかりました、すべてが魅力のようになります。アプリケーションは期待どおりに機能し、forever listと入力すると、実行中のプロセスが表示されます。

次に、foreverList.shという名前の(非常に単純な)スクリプトを作成し、フォルダー/var/www/scripts/に配置しました。

#!/bin/bash

echo "checking running node.js scripts:"
forever list

シェルからwww-dataユーザーとしてスクリプトを実行すると、機能します。ここには何も派手なものはありません。ただし、このスクリプトはPHP 5.6からApache2.4まで、次のように使用されます。

<?php
// ....
$resp_script = Shell_exec("/var/www/scripts/foreverList.sh 2>&1");
echo "<pre>$resp_script</pre>";

そして、Webブラウザを介して実行すると(上記のPHPコード)では機能しません!!このforeverエラーメッセージが表示されます(phpではなくnodejs) )::

/usr/lib/node_modules/forever/lib/forever.js:674
procs.forEach(function (proc) {
^
TypeError: Object Error: EACCES, permission denied '/root/.forever/sock' has no method 'forEach'
...
... #(stack trace follows)

/ var/www /フォルダーからwww-dataユーザー(スクリプトにwhoamiを追加)としてこれらすべてを実行しているため、なぜ/ rootフォルダーを処理するのか本当にわかりません。それが事実であったことを確認してください、そしてそれはそうです)。

私は何かが恋しいですか?それは永遠のバグですか?

どんな助けでも大歓迎です。

[〜#〜] update [〜#〜]:bashスクリプトにecho $HOMEを追加しようとしましたが、何も返されません。 PHP自体は、www-dataユーザーのホームパス環境変数を消去しますか?

4
Polosson

さて、私はついに解決策を見つけました。

実際、Apacheは$HOME環境変数の設定を解除しました(/etc/Apache2/envvarファイルの4行目を参照:unset HOME

行うべき唯一のことは、追加することでした:

export HOME=/var/www

bashスクリプトのforever list行の前。

そして、魅力のように機能します。

3
Polosson