0

現在、奇妙な問題が発生しています。毎回完全に実行されていないように見える大きなスクリプトを作成しました。

詳しく説明すると、スクリプトはデータベースと API に対して多くのクエリを実行し、Web サイトのデータを更新します。現在数週間実行されていますが、それ以前および執筆時点では、スクリプトを複数回 (通常は 2 回) 連続して開始すると、実行が停止することがあります。

したがって、問題はあまり一貫していませんが、これは私の Web サイトの重要な部分であり、すべてを実行し続けるために、特定の時間に毎日 1 回実行する必要があります。

スクリプト自体に問題はないはずです。最初に、タイムアウトを受け取る問題を修正する必要がありました。スクリプトが完了するまでに最大 1 時間かかる場合があるため、タイムアウトは大きな問題です。

私がチェックしたこと:

- 私の cron ジョブを妨害している cron ジョブはありますか? ※見る限りではありません。多くの標準保守 cron が実行されていますが、問題は発生しないはずですか? 問題のある cron ジョブが実行されている間、自分で作成した他の cron ジョブは実行されていません。

- 十分なメモリが残っていますか? *ほとんど多すぎます。

- スクリプトは正常に動作しますか?それが問題の原因である可能性がありますか? * そうかもしれませんが、方法がわかりません。スクリプトを手動で何百万回もチェックしました。

- ログをオンにしましたか? * 私はしませんでした。これは良い考えかもしれませんが、どのログをオンにすればよいかわかりません。また、過去にエラー報告の問題があったので、オンにしても何もキャッチされないのではないかと心配しています.

私が実行しているもの: - ターンキー Linux

フィニッシャーとして、スクリプトはデバッグが難しく、完了するまでに約 1 時間かかり、同じコードで停止することはありません。

tl;dr: しばらくの間ランダムにクラッシュし、その後長時間クラッシュを停止する cronjob をデバッグするにはどうすればよいですか?

編集 迅速な対応ありがとうございます@Basile Starynkevitch:試してみましたが、エラーは発生せず、停止するだけです。スクリプトには、それを引き起こす可能性のあるものは何もありません。

スクリプトの関連部分をお見せすることはできません。大きすぎると思います。しかし、結局のところ、多くのクエリとデータ処理が必要になります。

@fedorqui: cd /var/www/cronjobs/ && /usr/bin/php -q -f sc_distri_cronjob.php テスト目的で公開フォルダーにありますが、私の問題とは関係がないと思います。スクリプトは長時間正常に実行されるため、パーミッションは問題ないと思いますか?

@Flosculus: ロックがかかっています。これが私たちの注目を集めました。一度「問題なく」実行されてから再度実行すると、実行が停止したにもかかわらず、ファイルがまだロックされていることがわかります。ロックは最後に解放され、エラーは含まれていません。スクリプト内の何も意図的に実行を停止することはできません。

4

1 に答える 1

1

スクリプトは非常に大きいため、php.ini の max_execution_time よりも長く実行される可能性があります。十分な時間でset_time_limit()
を 使用してみてください。 また、スクリプトの平均実行時間を追跡し、呼び出しを調整することもできます。

于 2013-08-09T09:40:14.740 に答える