Ubuntu upstartでdjangoのrunfcgiを管理する

upstart (init) でdjangoサーバを管理すると:

  • システム起動時に立ち上げてくれる
  • 死んでも生き返らせてくれる
  • start stop statusで開始、停止、ステータスチエックなどができる。

rc (init.d)とかぶっているところがあるが、ubuntuはrcからupstartに移行しつつあるようなので、今これにしておくと後で楽かもしれない。

/etc/init/hoge.conf


description "hoge server"
# 死んでも生き返れ
respawn
# サーバのforkパターンをupstartに教える。開始後、ターミナルからデタッチするdaemonの場合はこれ。
# ここで間違えると苦労するので要注意。
expect daemon
# サービスを開始するコマンド
exec sudo -u www-data python /home/www/hoge/manage.py runfcgi method=thread host=127.0.0.1 port=8000 outlog=/home/hoge/log/hoge.out errlog=/home/hoge/log/hoge.err pidfile=/home/hoge/run/hoge.pid

サービスの開始


$ sudo start hoge
hoge start/running, process 23469

pidの確認。このpidが上記のと違うとupstartはサーバをちゃんと管理できていことになる。


$ cat /tmp/hoge.pid
23469
$ ps auxww | grep manage.py | grep -v grep
www-data 23469 0.0 0.3 145784 13360 ? Sl 01:01 0:00 python /home/www/hoge/manage.py runfcgi method=thread host=127.0.0.1 port=8000 outlog=/tmp/hoge.out errlog=/tmp/hoge.err pidfile=/tmp/hoge.pid

ステータス


$ status hoge
hoge start/running, process 23469

停止


$ sudo stop hoge
hoge stop/waiting
$ status hoge
hoge stop/waiting
$ ps auxww | grep manage.py | grep -v grep
# 本当に無い

respawnが機能しているかを確認


$ sudo start hoge
hoge start/running, process 23502
$ ps auxww | grep manage.py | grep -v grep
www-data 23502 0.0 0.3 145788 13364 ? Sl 01:02 0:00 python /home/www/hoge/manage.py runfcgi method=thread host=127.0.0.1 port=8000 outlog=/tmp/hoge.out errlog=/tmp/hoge.err pidfile=/tmp/hoge.pid

殺してみる


$ sudo kill 23502

期待どうり生き返っている


$ ps auxww | grep manage.py | grep -v grep
www-data 23514 0.0 0.3 145784 13372 ? Sl 01:02 0:00 python /home/www/hoge/manage.py runfcgi method=thread host=127.0.0.1 port=8000 outlog=/tmp/hoge.out errlog=/tmp/hoge.err pidfile=/tmp/hoge.pid

しかも、upstartが新しいpidを認識している


$ initctl list | grep hoge
hoge start/running, process 23514

$ cat /tmp/hoge.pid
23514