私は大きなPHPスクリプトを実行しています.
その仕事を終えるのに丸一日
かかるかもしれませ
ん.必要な限りバックグラウンドで実行します。ターミナルを使用して実行しました.PHPスクリプト自体には、終了するまでできるだけ長く実行するための設定があります:
set_time_limit(0); // run without timeout limit
別の分離されたPHPスクリプトから実行するため、この関数を使用します
ignore_user_abort(1); // ignore my abort
コマンドラインから直接実行するため、2つの選択肢があります..
1)スクリプトが終了するまで待つ
2)プロセス全体をキャンセルする
そして検索した後、次の関数を使用してバックグラウンドでメインの BIG PHP スクリプトを実行する外部 PHP スクリプトを作成することにより、可能な限り長くバックグラウンドで実行するという 3 番目の選択肢を提供する記事がありました。
exec("php bigfile.php");
つまり、ブラウザから通常どおりこの外部ページを開きignore_user_abort
、バックグラウンドで実行し続けるため、心配することなく終了できます..それはまだ問題ではありません
問題は..不明な期間の後、スクリプトはその仕事を停止します..どうすればわかりますか? 動作する各レコードの現在の日時を外部ファイルに書き込むように指示したので、その外部ページを毎回更新して、更新が停止したかどうかを確認します。
不明な期間の後、実際には理由もなく停止します。スクリプトには停止などのメッセージが何もありません..何か問題が発生した場合は、レコードをスキップするように指示しました(何も問題は発生しません。それらはすべて同じ行で機能します。 1つが機能し、すべてが機能するはずです)
しかし、私の主な疑問は次のとおりです。
- Apacheにはそれを殺すタイムアウトがあります
- これは、バックグラウンドで PHP スクリプトを実行する適切な方法ではありませんでした
- PHP であれ、Apache であれ、( MySQL !?)であれ、どこかにタイムアウトがあります。それ
が私の最大の疑問です。エラーが発生した場合、スクリプト全体がクラッシュしますか? スクリプト全体をクラッシュさせるタイムアウトはありますか?while
それらのどれにも当てはまらない場合、現在スクリプトで正確に何が起こっているかをログに記録する方法はありますか? または、なぜクラッシュするのでしょうか? すべてをログに記録する詳細な方法はありますか?
更新:
messages
のファイルでこれを見つけました/var/log/
:
Dec 29 16:29:56 i0sa shutdown[5609]: shutting down for system halt
Dec 29 16:30:14 i0sa exiting on signal 15
Dec 29 16:30:28 i0sa syslogd 1.5.0#6: restart.
Dec 29 16:50:28 i0sa -- MARK --
.....
Dec 29 18:50:31 i0sa -- MARK --
Dec 29 19:02:36 i0sa shutdown[3641]: shutting down for system halt
Dec 29 19:03:11 i0sa exiting on signal 15
Dec 29 19:03:48 i0sa syslogd 1.5.0#6: restart.
それはシステムの停止を意味します..私はこれが将来のクラッシュと試合時間でそれである可能性があることを確認しようとします.これが原因である可能性はありますか? なぜ ?私はサーバーメモリRAMを持っていますが、これmemory_limit
は128Mですか?2GB
PS: サーバーを手動で数回再起動しました..しかし、これはシャットダウンと停止を示していますか?