1

私は無限ループで動作するPythonスクリプトを持っています.スクリプトはいくつかのことを行い、クラスからいくつかのメソッドを使用し、私が持っているいくつかのロガーに情報を記録し、SQS Amazonキューで動作します. このようなもの:

A = ClassA()
B = ClassB()
C = ClassC()

while True:
    # pull messages from SQS
    messages = sqs.pull_messages()
    logger.info('Pulled messages from SQS')
    A.do_something(messages)
    logger.info('Doing something on class A')
    # download something from the internet
    data = B.download_something()
    logger.info('Downloaded something')
    C.insert_to_database()

スクリプトは、メモリが不足したりスクリプトを終了したりすることなく、数日間正常に動作します。トレースバックが原因で、Linux ボックスで次のようにスクリプトを開始します。

python script.py &

数日後、ボックスに戻って、スクリプトがまだ実行されていることを確認できますが、ロガーは 1 日前までデータをログに記録していました。これは一般的なパターンではありません。スクリプトが数時間後、場合によっては数日後に動作を停止することもありますが、強制終了されることはありません。

私の質問は、プロセスkill pidを強制終了して何が起こっているのかを確認する方法はありますか? 事後分析デバッガーを起動すると、スクリプトが何をしていたか、またはスクリプトを強制終了する前にどの行にあったかがわかります。これに取り組むアプローチはありますか?

4

3 に答える 3

1

最も簡単な方法は、stderr をファイルにリダイレクトすることです。

python script.py 2> my_error_file &

Python は実行中の行の情報を提供します。プログラムが失敗した場合は、ファイルを確認できます。

kill -SIGINT <pid>ただし、それを殺す必要があります

于 2013-08-21T19:27:48.567 に答える