Linuxのコマンドラインを使用して、バックグラウンドで継続的にPHPスクリプトを実行しようとしています。コマンドphp filename.php &
しかし、スクリプトの実行は非常に迅速に終了するようですが、プロセスが終了するまで実行し続ける必要があります。
助言がありますか?
スクリプトにエラーが含まれていませんか?これは、通常「実行が非常に迅速に終了する」ものです。
最初に、追加:
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
を使用できます。
フルパスを推奨回避するためにファイルが見つかりませんエラー。
セッションが閉じられると、プロセスが閉じられる場合があります。
Nohup php filename.php
を使用してみてください
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/
Nohup /path/to/command-name arg1 arg2 &
どこ:command-name
:シェルスクリプトの名前またはコマンド名。引数をコマンドまたはシェルスクリプトに渡すことができます。&
:Nohupは、実行するコマンドをバックグラウンドで自動的に配置しません。コマンドラインを&記号で終了することにより、明示的に行う必要があります。