SupervisorでPythonのWebアプリをデーモン化する

  • 44
    Like
  • 0
    Comment
More than 1 year has passed since last update.

awsでPythonのWebアプリをTornadoフレームワークを使って開発していたときに、awsで起動させているWebアプリがよく寝る(アプリが落ちる)ので、デーモン化して無休で働かせ(常時起動)て、もし寝たとしても起こす(アプリ再起動)ようにしたときのメモ。

Supervisorとは

SupervisorはPython製の軽量なプロセス管理ツール。

手順

手順は以下のような感じ。
作業は全てaws上のubuntu14.04で行っています。

インストール

Supervisorはapt-getでもpipでもインストールできるのですが、とりあえず、Ubuntuでapt-getでインストールする方法を記載しておきます。

※インストール方法によって、設定ファイルの場所が変わってくるので注意しましょう。apt-getの場合 /etc/supervisor/conf.d/

  • Ubuntu (apt-get) の場合
$ sudo apt-get install supervisor

インストールされたことを確認。バージョンは3.0b2が入ったみたい。

$ supervisord -v
3.0b2

$ sudo supervisorctl version
3.0b2

設定

Supervisorの設定ファイル(confファイル)にWebアプリ起動のための情報を書きます。
/etc/supervisor/conf.d/ にconfファイルを作成します。

$ sudo vim /etc/supervisor/conf.d/tornado.conf

中身は以下のようにしました。Supervisorに管理させるプロセスとしての名前はtornadoにしました。

tornado.conf
[program:tornado]  ; プロセスの名前
directory=/home/ubuntu/tornado-app  ; 作業ディレクトリ
command=/home/ubuntu/tornado-app/venv/bin/python /home/ubuntu/tornado-app/server.py --port=3000  ; 起動コマンド
numprocs=1  ; 起動インスタンス数?
autostart=true  ; autostartする
autorestart=true  ; 自動で再起動させる
user=ubuntu  ; 起動ユーザ
redirect_stderr=true  ; 標準エラーを出力する
stdout_logfile=/var/log/supervisor/tornado.log  ; ログファイルの出力先

Webアプリはあらかじめ、/home/ubuntu/tornado-app にgit clone済みだとします。

  • (参考)Supervisorを使わない場合の起動方法 ちなみにSupervisorを使わない場合、つまり、ターミナルからWebアプリを起動させる場合は以下のコマンドで起動させていました。
$ cd ~/tornado-app
$ source venv/bin/activate  # virtualenvをactivate
(venv)$ python server.py --port=3000 &

あと、Supevisorの設定ファイルの書き方はSupervisor configurationを参考にしてください。

supervisorの起動、設定ファイルの読み込み

service supervisorコマンドを使ってSupervisorを起動します

Supervisor自体の再起動します。

$ sudo service supervisor restart

Supervisor自体が起動しているか確認します。

$ sudo service supervisor status
 is running

プロセスの起動、管理

supervisorctlコマンドでプロセスを管理します。

confファイルを変更した場合、かならず再読み込み(reread)が必要になります。
confファイルの読み込みは以下のコマンド。

$ sudo supervisorctl reread

あとはSupervisorで管理しているWebアプリを起動させます。

$ sudo supervisorctl start tornado  # 起動

Webアプリが起動しているか確認。

$ sudo supervisorctl status  # ステータス確認
tornado                          RUNNING    pid 3414, uptime 0:07:19

起動した!

ちなみに、停止と再起動は以下のとおりです。

$ sudo supervisorctl stop tornado  # 停止
$ sudo supervisorctl restart tornado  # 再起動

その他、supervisorctlのコマンドはこちらが参考になりました。

参考