Djangoのbackground tasksをデーモン化したいなーと思ったので、その際の備忘録。
supervisorとは
インストール
$ sudo yum install supervisor $ sudo pip install supervisor
yumでインストールするとpython26も一緒にインストールされる。
python27をインストールしていたので、yumだけだと動かなかった。。
なので、pipを使って、supervisorをインストールした。
インストールするとそれぞれ以下の場所にインストールされる
- 起動用のスクリプト ... /etc/init.d/supervisord
- コンフィグファイル ... /etc/supervisord.conf
- コンフィグ用ディレクトリ ... /etc/supervisord.d ※includeするコンフィグの置き場
- 本体のログファイル ... /var/log/supervisor/supervisord.log
起動・停止
yumでインストールするとservice
コマンドで管理できる
# 起動 $ sudo service supervisord start # 停止 $ sudo service supervisord stop
設定方法
supervisord.confに以下のようなテンプレートが用意されているので、
適宜コメントインして、設定すればOK。
;[program:theprogramname] ;directory=/tmp ; (default is not to cd during start) ;command=/bin/cat ; the program (relative uses PATH, can take args) ;priority=999 ; the relative start priority (default 999) ;autostart=true ; start at supervisord start (default: true) ;autorestart=true ; retstart at unexpected quit (default: true) ;startsecs=10 ; number of secs prog must stay running (def. 10) ;startretries=3 ; max # of serial start failures (default 3) ;exitcodes=0,2 ; 'expected' exit codes for process (default 0,2) ;stopsignal=QUIT ; signal used to kill process (default TERM) ;stopwaitsecs=10 ; max num secs to wait before SIGKILL (default 10) ;user=chrism ; setuid to this UNIX account to run the program ;log_stdout=true ; if true, log program stdout (default true) ;log_stderr=true ; if true, log program stderr (def false) ;logfile=/var/log/cat.log ; child log path, use NONE for none; default AUTO ;logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) ;logfile_backups=10 ; # of logfile backups (default 10)
例としては以下の感じ
[program:ProcessTasks] directory=/var/www/cgi-bin/django command=python manage.py process_tasks autostart=true autorestart=true user=root logfile=/var/log/process_tasks.log
その他のデーモン化ツール
- deamonize tool ... http://cr.yp.to/daemontools.html
- systemd