1

Web クローリングを行うために使用するスクリプトがいくつかあります。それらは常に実行されており、停止することはありません。しかし、約 1 週間後、それらは体系的に「フリーズ」します。もはや出力はなく、Ctrl+C などに対する応答もありません。唯一の方法はkill、プロセスを再起動することです。

これらの問題は、データの取得に使用するライブラリ ( ) に起因すると思われますurllib2が、問題を再現するのは非常に困難です。

したがって、プロセスの状態を確認し、プロセスがフリーズしている場合は自動的に強制終了/再起動する方法を考えています。PID ファイルを作成し、定期的に更新することを考えていました。次に、別のスクリプトでこの PID ファイルの最終変更日を定期的にチェックし、古すぎる場合はプロセスを再起動します。Monitのようなものを使用して監視を行うことができます。

これは私がそれを行うべき方法ですか?プロセスの応答性をチェックするための別のベスト プラクティス/一般的な方法はありますか?

4

1 に答える 1

2

常に実行されているプロセスがあり、端末が接続されておらず、プロセスグループリーダーである場合、つまりデーモンです。あなたは間違いなくそれをすべて知っています。

そのようなプログラミングプログラムには事実上の慣習がいくつかあります。1つは、SIGHUPを受け取り、プログラムにそれ自体を再初期化させるシグナルハンドラーを用意することです。これは、開いているすべてのログファイルを閉じたり、構成スクリプトを再読み込みしたりすることを意味します。これが問題にどの程度当てはまるかはわかりませんが、作業中のデーモンのフリーズなどの問題が解決する場合があります。

SIGUSR1SIGUSR2シグナルを使用して、ファイルへのステータスの書き込みなどの特別なことを行うことで、アイデアをカスタマイズできます。シグナルは割り込みで着信するため、スクリプトのトラップステートメントとPython自体のシグナルハンドラーは、プログラムの状態を割り込みスタックにプッシュして「処理」を実行します。あなたの場合、あなたはプログラムfork / exec自体が欲しいかもしれません、そしてそれから親を殺します。

于 2013-02-26T23:41:21.017 に答える