2011-08-08 21 views
19

LinuxのコマンドラインからバックグラウンドでPHPスクリプトを継続的に実行しようとしています。私はコマンドphp filename.php &を試してみましたが、スクリプトの実行が非常に迅速に終了するようですが、プロセスが終了するまで実行し続ける必要があります。コマンドラインからバックグラウンドプロセスとしてPHPスクリプトを実行する

提案がありますか?

+2

すぐに終了するとはどういう意味ですか?最後に&は、スクリプトがバックグラウンドで実行されている間にシェルコマンドを実行し続けるプロンプトを返します。まだ "jobs"と入力して実行中であるかどうかを確認できます – Zak

+1

error_reporting(E_ALL) display_errors = 1?いくつかのエラーがあり、プロセスが異常終了している可能性があります。 – marcelog

+2

try:exec( "nohup php file.php>/dev/null 2> &1 &"); –

答えて

37

スクリプトにエラーはありませんか?これは、通常、「実行が非常に迅速に終了するようになります。」です。 まず、それが持っている可能性のあるエラーを表示するには、スクリプトの先頭にerror_reporting(E_ALL); ini_set('display_errors', 1);を追加し、あなたが使用することができます。セッションが切断された場合でも、コマンドまたはユーザー ログを実行しますnohupを

nohup php filename.php &

でる。

OR

nohup php filename.php >/dev/null 2>&1 &

上記と同じ

が、nohup.outファイルを作成しません。


使用することもできます:クライアントの接続が切断されたスクリプトの実行を終了するかどうか
ignore_user_abort(1);

を設定


set_time_limit(0);

スクリプトの最大実行時間を制限します。この場合は、 プロセスが終了するか、またはApacheプロセスが再開するまで実行されます。


ノート

phpfilename.phpパスが代わりphpfilename.phpの、あなたが/usr/bin/php/full/path/to/filename.phpを使用することができ、フルパスとして提供されてもよいです。
フルパスはを避けてください。ファイルが見つかりませんエラー。

+0

出力リダイレクトがないと、echoステートメントがスクリプトを終了させますか? – Kyle

+1

@Pedro Lobitoありがとうございます。 – whitesiroi

+0

歓迎@whitesiroi –

15

セッションが終了するとプロセスが終了することがあります。
command-name

nohup php filename.php

+0

ありがとう! – arik

2
nohup /path/to/command-name arg1 arg2 & 

どこを使用してみてくださいシェルスクリプトやコマンド名の名前。コマンドやシェルスクリプトに引数を渡すことができます。
&:nohupは、バックグラウンドで実行されるコマンドを自動的に入れません。コマンドラインを&シンボルで終了することで明示的に行う必要があります。

+1

[回答](http://stackoverflow.com/a/6989340/6209665)。[コードの書式設定](https://meta.stackexchange.com/que stions/22186/how-do-i-format-my-code-blocks)をご覧ください。 – Andrew

2
nohup php file.php > /dev/null 2>&1 & 

これらのコマンドのmore-thans(>)は、プログラムの出力をどこかにリダイレクトします。この場合、何かが/dev/nullにリダイレクトされている、と何かが、アウト、およびエラーに&1

標準にリダイレクトされている

プログラムの入力と出力の3つの標準ソースがあります。標準入力は通常、対話型プログラムの場合はキーボードから、他のプログラムの出力を処理している場合は別のプログラムから行われます。プログラムは通常、標準出力に出力しますが、標準出力に出力することもあります。これら3つのファイル記述子(「データパイプ」と考えることができます)は、しばしばSTDIN, STDOUT, and STDERRと呼ばれます。

名前が付けられていない場合もありますが、番号が付けられています。それらの組み込み番号はの順になっています。デフォルトでは、明示的に名前を付けたり番号を付けたりしないと、STDOUTと言います。

上記のコマンドは、標準出力を/dev/nullにリダイレクトします。これは不要なものをダンプして標準出力にリダイレクトする場所です(先に&を置く必要がありますこれを行う)。

簡単な説明は「このコマンドからのすべての出力をブラックホールに押し込む」ということです。プログラムを本当に静かにする良い方法です。

&は、バックグラウンドでコマンドを置きます。

ref:https://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/

関連する問題