万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Supervisor X Tornadoのメモ Python

いろいろブログ見たけど、ハマリどころを書いてないのでメモしました。ノイズみたいな記事が多すぎ。
URL: http://d.hatena.ne.jp/anatoo/20120310/1331321778

普通にインストールせずにファイルとしてSupervisorを置くだけで使えるらしいが、
「supervisor.medusa」がインポートできない問題の解決策がわからないので、
インストールはpipで行った。

pip install supervisor

この「echo_supervisord_conf」コマンドでデフォルトのコンフィグファイルを出力してくれるらしいので、
/etc/supervisord.confに保存させる。

echo_supervisord_conf > /etc/supervisord.conf

おそらく、/etc配下は権限がないと出来ないので、

sudo echo_supervisord_conf > /etc/supervisord.conf

とかでやらないと出来ないでしょう。

しかし僕はなぜか権限エラーで出来なかったので、

echo_supervisord_conf > tmp

いったんカレントディレクトリにtmpとして保存して、

sudo mv tmp /etc/supervisord.conf

mvコマンドで移動させるというやり方したw

そのあとで、「supervisord.conf」。ここを強調してない記事があるので、見落としがちです。

[include]
files = /etc/supervisord.d/*.ini

このように書き換えておきます、「/etc/supervisord.d」配下にある「〜.ini」ファイルを見てくれます。
[include]の前にもセミコロンがあるのを外しておきましょう。
「/etc/supervisord.d」というディレクトリが/etcの下にないといけないので

mkdir /etc/supervisord.d

を使います。

supervisord

でいったん起動します。

次に、まだTornadoの起動の設定をしてないので、記載します。
「tornado.ini 」ってファイルを「/etc/supervisord.d」配下に作ります。

sudo vi /etc/supervisord.d/tornado.ini 
[program:tornado]
command=python /hoge_path/facebook.py --port=3000
numprocs=1
autostart=true  ; supervisorが起動したら自動的に起動する
autorestart=true ; 落ちても自動的に再起動する
user=tornado_usr
redirect_stderr=true ; エラー出力を標準出力にリダイレクトする
stdout_logfile=/tmp/tornado.log ; 標準出力をログに取る

hoge_pathは自分のに置き換えましょう。
また、
facebook.pyは起動したいTornadoのPythonファイルですね。

    • port=3000もご自身のに置き換えましょう。

%(process_num)s という書き方もできるらしいが、この変数をどこに設定するのかがわからないので
無視しました。
http://webos-goodies.jp/archives/deploying_tornado_with_supervisord.html#comments
の記事を書いた人に質問しました。

記載が終わったら、

supervisorctl restart
supervisorctl reread
supervisorctl add tornado

でいけるはずですね。

「supervisorctl status」コマンドで確認できます

$ supervisorctl status
tornado                          RUNNING    pid 31712, uptime 0:00:08

これで僕はさくらのサーバ使ってるけどコンソールを切ってもOKでした。