73
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

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のコマンドはこちらが参考になりました。

参考

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
73
Help us understand the problem. What are the problem?