2016-03-31 8 views
0

私はDaemonを使用して、私が持っているpythonスクリプトのデーモンを生成しています。しかし、ログはファイルに書き込まれていないようです。私は(ここでは読みやすくするために適したフォーマットで)使用していますシンプルなbashスクリプトは:Ubuntuの "Daemon" - ログに失敗する

if ! daemon --name atlas --running; then 
    daemon --errlog /home/ubuntu/output.log 
    --dbglog /home/ubuntu/output.log 
    --output /home/ubuntu/output.log 
    --stdout /home/ubuntu/output.log 
    --stderr /home/ubuntu/output.log 
    --respawn 
    --name acme 
    /home/ubuntu/acme.py 
fi 

これは、スクリプトを正常に起動し、それが問題なく生き続けています。また、スクリプトが強制終了されたときにログに記録されますが、stdoutには何も記録されません。

スクリプトが例外を検出すると、一度に出力する必要があるすべての履歴ログデータがダンプされるようです。

答えて

1

出力バッファに問題があります。多くのプログラムは、パフォーマンスを得るために出力をバッファリングしていますが、場合によっては出力をログに表示することを延期しています。

あなたは以下の状況でのログの中で何かが表示されます。

出力バッファ内のデータ量は、いくつかのサイズに達するとフラッシュを取得します
  • 出力が閉じているときに、例えばプロセスが終了するとき。

あなたは何らかの理由で出力をフラッシュするようにしなければなりません(例えば、標準出力に出力するなど)。いくつかのオプションがあります:

  • は完全に出力バッファの使用を防ぐ -
  • 非常に効率的ではないだけで1行に出力バッファを許可します。それぞれの改行によって、出力がフラッシュされて可視になります
  • loggingを使用してログアウトします。いつかは、必要なバッファリングを強制します。
  • あなたのスクリプトを開始するいくつかの外部プログラムを使用してください - いくつかは出力バッファを制御するハックを使用しています。

出力バッファ制御に関するいくつかの質問と回答があります。そのうちの1つはDisable output bufferingであり、もう1つはunbufferHow to make output of any shell command unbuffered?の使用を提案しています。

+0

あなたは正しいです。一度処理するのに十分なデータがあれば、すべてをダンプしました。 –

関連する問題