4

これは私を夢中にさせています。ノードで実行されているスクリプトを再起動するには、phpにコマンドを実行させる必要があります。このスクリプトを実行するために、foreverというノードアプリを使用しています。コードは次のとおりです。

<?php 
  echo '<pre>';
  echo exec('sudo -u dalton forever restart botti.js 2>&1');
  echo '</pre>';
?>

しかし、それを実行すると、sudo: forever: command not found

次に、私は試しwhich foreverてみtype foreverます、両方とも私に与えます:
forever: /usr/local/bin/forever

コードを次のように編集します。
echo exec('sudo -u dalton /usr/local/bin/forever restart botti.js 2>&1');

編集:タイプミスの後、エラーは次のようになります:
/usr/bin/env: node: No such file or directory

私は私の機知に富んでいます。何か案は?

4

3 に答える 3

7

コマンドは実行されるだけなのでforever、フルパスを指定すると、環境変数に/usr/local/binはないのではないかと思います。PATH環境変数には、デフォルトで実行可能コマンドが検索されるすべてのディレクトリが含まれてい:ます。他のOSとは異なります)

forever呼び出しが疑われます/usr/bin/env node。からのエラーenvは、おそらくnodeあなたの外にいることが原因PATHです。

phpでPATHを設定するには、putenv('PATH=<your path here>'); egを使用して次を追加します/usr/local/bin

putenv('PATH=' . getenv('PATH') . ':/usr/local/bin')

これも問題になる可能性があります。(環境を保持する)スイッチsudoを試してください。-E

于 2012-11-14T11:49:08.483 に答える
2

それを理解したので、ノードも定義する必要がありました。

$asdf = system('sudo -E -u dalton /usr/local/bin/node /usr/local/bin/forever restart botti.js 2>&1');

于 2012-11-14T12:09:23.617 に答える
0

永遠にシンボリックリンクを作成する

ln -s /usr/local/bin/forever /usr/bin/env/forever

また、nodejsの場合は、それがまだ「nodejs」と呼ばれている場合もあります。「ノード」と呼んでください

ln -s /usr/bin/nodejs /usr/bin/node

私は永遠の実行の問題を解決します。

PHP側の場合は、これを試してください

echo shell_exec("your command sh");
于 2016-03-22T14:09:18.547 に答える