2012-04-28 19 views
0

は、私はcronの実行PHPスクリプトは、端末

*/5 * * * * /var/www/scripts/run.php 

run.php

#!/usr/bin/php 
<?php 
#stop server 
exec("python /home/server.py stop"); 

#execute some php code here 

#start server again 
exec("python server.py start 2>&1 &"); 
?> 

最後の行が問題の原因を経由して実行するPHPスクリプトを持ってハングアップします。私は、端末

/var/www/scripts/run.php 

から直接PHPスクリプトを実行すると

は、これは、サーバーを起動しますが、スクリプトをcronを介して実行された場合、端末は

が、私は以下のpsで見

をハングスクリプトは完了しましたが、

root  23510 0.5 1.3 280064 14228 ?  Ss 10:32 0:00 /usr/bin/php /var/www/scripts/run.php 

それ?

おかげ

+1

を行います。最後のコード?あなたはexecやsystemを通してPythonを実行してはいけませんか? – davidethell

+0

と完全なパスを指定するための記者 – k102

+0

ここにphpは本当に必要ではないようですが、bashスクリプトはそうです。また、あなたは 'www'でそれを保持すべきではありません。 Webには表示されないディレクトリに移動します。 – Nadh

答えて

1

PHPスクリプトが実際にシェルスクリプトである場合は、シェバングを変更。 Pythonの呼び出しをバックグラウンドで実行するには、行の最後に "&"を追加します。シェルスクリプトにする場合は、sh -x <script>で実行して、どのコマンドがハングするかを調べてください。

これを有効なPHPスクリプトにしたい場合は、多くの作業が必要になりますが、POSIXを使用している場合はfork()を使用すると比較的簡単になります。

+0

を反映するようにコードを修正しました。いいえ、UNIXのシェルスクリプトは必要ありませんが、有効なPHPスクリプトは必要ありません。また、私はLinuxを使用しています。あなたはforkを使っていくつかの例を提供できますか?ありがとう – Thomas

+0

ここのフォークの例:http://php.net/manual/en/function.pcntl-fork.php –

1
これにあなたの最後の行を変更

exec("nohup python server.py start 2>&1 &"); 

nohupをが制御プロセスやユーザーがなくなったときに停止しないプロセスを教えてくれます。それはあなたの問題かもしれませんが、試してみる価値があります。

+0

ありがとう。試してみましたが結果は同じです。 – Thomas

+0

出力をファイルにリダイレクトするとどうなりますか?終了を ">> some_output_file&"に変更してみてください – davidethell

+0

まだ何もありません。それは私を夢中にさせている – Thomas

0

それはすることができますようにあなたがPHP内部からのpythonを呼び出すことはできませんトリック

exec("nohup python server.py start &> /dev/null &"); 
関連する問題