2011-05-11 11 views

答えて

1

私は通常、ログを追加することから始めます。少なくとも、それを起動しているものはstdout/stderrをキャプチャして、スタックトレースを保存するようにしてください。 exceptブロックを調べて、例外をサイレントにキャプチャしていないことを確認してください。

0

あなたはpdbを使用することができます。

python -m pdb myscript.py

このようなあなたのプログラムを実行すると、それが異常終了した場合、それは事後デバッグを入力します。問題の原因がわかっている場合は、デバッグを開始する時点でimport pdb; pdb.set_trace()を使用することもできます。ロギングも多大な助けになります。

+0

これは、人間の相互作用を必要とするように表示されます。これは何日もの間うまく動作しますので、これはうまく動作しません。非インタラクティブなデバッグモードはありますか? – CarpeNoctem

+0

あなたは['screen'](http://linux.die.net/man/1/screen)でそれを実行しようとすると、デバッガをトリガするときにそれにアタッチし、対話的にデバッグすることができます。非対話型デバッグモード??私はそれがロギングだと思います! – zeekay

+0

私は "bash -x"と似た何かを意味していましたが、どこに "デバッグ"の出力を提供しますが、誰かがそれを踏んだり "キーボードのやりとり"をする必要はありません。 – CarpeNoctem

0

上記の答えとして、python-daemonモジュールを使用している場合は注意してください。ただし、ファイルにロギングするときにロギングモジュールでは機能しませんので、手動でファイルにロギングする必要があります。

また、デーモンは、ループ内で実行してループ内で例外をキャッチすることで、障害が発生した後に再起動します。

例:

while True: 
    try: 
     log_to_file("starting daemon") 
     run_daemon() 
     log_to_file("daemon stopped unexpectedly") 
     sleep(1) 
    except Exception as err: 
     log_to_file(err) 
関連する問題