web-dev-qa-db-ja.com

バックグラウンドプロセスとしてコマンドラインからPHPスクリプトを実行

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

助言がありますか?

30
Kyle

スクリプトにエラーが含まれていませんか?これは、通常「実行が非常に迅速に終了する」ものです。
最初に、追加:

error_reporting(E_ALL); ini_set('display_errors', 1);

スクリプトの上部にある可能性のあるエラーを表示するには、次を使用できます。

Nohup php filename.php &

Nohupは、セッションが切断された場合やユーザーがログアウトした場合でもコマンドを実行します。

OR

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

上記と同じですが、Nohup.outファイルを作成しません。


以下も使用できます。
ignore_user_abort(1);

クライアントの切断によりスクリプトの実行を中止するかどうかを設定します


set_time_limit(0);

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


ノート

phpおよびfilename.phpパスは、phpおよびfilename.phpの代わりにフルパスとして提供される場合があり、/usr/bin/phpおよび/full/path/to/filename.phpを使用できます。
フルパスを推奨回避するためにファイルが見つかりませんエラー。

51
Pedro Lobito

セッションが閉じられると、プロセスが閉じられる場合があります。

Nohup php filename.phpを使用してみてください

16
mustafa
Nohup php file.php > /dev/null 2>&1 &

これらのようなコマンドの大なり記号(>)は、プログラムの出力をどこかにリダイレクトします。この場合、何かが/dev/nullにリダイレクトされており、何かが&1にリダイレクトされています

標準入力、出力、およびエラー

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

時々、名前が付けられず、番号が付けられます!それらの組み込みの番号は、0, 1, and 2の順です。デフォルトでは、明示的に名前や番号を付けない場合は、STDOUTについて話します。

上記のコマンドは、標準出力を/dev/nullにリダイレクトします。これは、不要なものをダンプできる場所です。次に、標準エラーを標準出力にリダイレクトします(&これを行うときの宛先)。

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

最後の&は、コマンドをバックグラウンドにします。

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

4
Kishan Rajdev
Nohup /path/to/command-name arg1 arg2 &

どこ:
command-name:シェルスクリプトの名前またはコマンド名。引数をコマンドまたはシェルスクリプトに渡すことができます。
&:Nohupは、実行するコマンドをバックグラウンドで自動的に配置しません。コマンドラインを&記号で終了することにより、明示的に行う必要があります。

3
codereverb