Help us understand the problem. What is going on with this article?

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

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

参考

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away