Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
72
Help us understand the problem. What is going on with this article?
@shiraco

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

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

参考

72
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
shiraco
Qiitaへの投稿記事、コメントは所属企業を代表するものではありません。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
72
Help us understand the problem. What is going on with this article?