Symfoware

Symfowareについての考察blog

Supervisor 「taif -f」のリンクにPythonのprint出力が表示されない

SupervisorのWebインターフェースに「tail -f」というリンクがあります。

582_01.png

標準出力ログが見られるのだろうと、こんなPythonのプログラムを作成して、
デーモンとして動かしてみました。


  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. import time
  4. def main():
  5.     
  6.     while(True):
  7.         print('alive!\n')
  8.         time.sleep(1)
  9. if __name__ == '__main__':
  10.     main()




結果、何も出力されず。

出力するための設定を調べたのでメモしておきます。



ログの出力パスを指定



Supervisorのデーモン設定で、ログの出力パス「stdout_logfile」を
指定していない状態だとダメでした。

ちゃんとパスを指定してやります。


[program:task]
command=/opt/daemon/task.py
process_name=%(program_name)s_%(process_num)02d
numprocs=1 ; ワーカーを1プロセス起動する
autostart=true ; supervisord起動時に自動的に起動する
autorestart=true ; プロセスが死んでも自動的に起動する
redirect_stderr=true

# stdout_logfileの指定が必須
stdout_logfile=/opt/daemon/task.log






sys.stdout.write



printではなく、sys.stdout.writeで文字列を出力。
sys.stdout.flushしてやります。

プログラムはこうなりました。


  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. import sys
  4. import time
  5. import datetime
  6. def main():
  7.     
  8.     while(True):
  9.         sys.stdout.write('%s alive!\n' % datetime.datetime.now().strftime('%H:%M:%s'))
  10.         sys.stdout.flush()
  11.         time.sleep(1)
  12. if __name__ == '__main__':
  13.     main()




これでブラウザにログが表示されるようになりました。

582_02.png


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/03/06(金) 00:30:11|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Copy.comへCopyCmdコマンドを使用してアップロード時「Error: Access is denied」 | ホーム | PythonからSupervisorのXML-RPC APIに接続する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1673-925964e4
この記事にトラックバックする(FC2ブログユーザー)