Ansibleで環境構築する時にuwsgiの再起動をservice使ってやりたかったので、supervisorにuwsgiを登録し、supervisorをserviceに登録するためにsupervisorについて調べてみたメモ
新しい設定のロード(2020/12/19追記)
supervisordの構成ファイルをhoge.iniとして新たに追加した。この構成をsupervisordに読み込ませる場合、単にreloadではダメで、rereadとupdateを必要とする。具体的には
supervisorctl reread
supervisorctl update
とする。
ざっくりコマンド(2020/12/19追記)
使いそうなやつだけ
- add
... supervisorのデーモンの管理対象として追加(nameはプロセスやグループ名)。rereadと組み合わせる - avail 管理しているプロセスの確認(statusも似てる?)
- clear
nameのログ消去 - maintail supervisord本体のログ確認。tailと同じで-fと組み合わせると幸せになる。
- pid プロセスのpid表示。killする時に使う?
- reload 設定ファイルの再読み込み(管理下のもの)
- remove
一時的にnameを管理から外す。元に戻すのはadd - reread デーモンの設定を再読み込みする。リスタートはしないので、updateなどと組みあわせる。
- restart 管理プロセスを再起動する。よく使う。restart allとかする(全プロセス再起動)
- shutdown デーモンを終了する。
- start 管理プロセスを起動する。start allとかする。
- status
管理プロセスの状況をチェックする - stop
管理プロセスを終了する。 - tail
管理プロセスのログを表示。-fをつけると幸せになる。 - update addとかremoveを適宜行ってくれる。
- version バージョン表示
参考:supervisorctlについて調べてみた Running Supervisor
ざっくり手順
色々はまったりして参考にしたのは以下のサイト
- Supervisorを使ってuWSGIを管理 — command not found:
- python - nginx and supervisor setup in Ubuntu - Stack Overflow
- supervisord - Supervisor always quit process with 'exit status 0; not expected' - Server Fault
-
Fail during installation of Pillow (Python module) in Linux - Stack Overflow
-
uwsgiのiniファイルを用意
- virtualenvでsupervisordをインストール
- supervisord.confを書く
- aptでsupervisorをインストールして削除
- /etc/init.d/supervisorを編集
- service起動
uwsgiのiniファイルを用意
省略
virtualenvでsupervisordをインストール
$ pip install supervisord
supervisord.conf、xxx.iniを書く
全体の設定はsupervisord.confで、個別のuwsgiに関する設定はxxx.iniで行うようにした
supervisord.confは適当に次のように編集した
- sudo使うならchownをrootに、でなければ現在のユーザーに
- pidfileを適当にtmpフォルダに設定
- includeでincludeしたいファイルを指定する(例えば下のような感じで書く)
[include]
files = /path/to/*.ini
xxx.iniにはuwsgiコマンドを指定する。stopasgroupオプションは有効にする
[hoge:fuga]
command = /path/to/virtualenv/bin/uwsgi /path/to/xxx.ini
stopasgroup = true
aptでsupervisorをインストールして削除
virtualenvでsupervisorをインストールしたいけど、service登録用のスクリプトは欲しかったのでこの作業をした
要はapt-getしてるだけなので省略
/etc/init.d/supervisorを編集
編集カ所は
- DAEMONに書くsupervisordのパスをvirtuaalenvでインストールしたところにする(/path/to/virtualenv/bin/supervisord)
- LOGDIRを適当にログを書き出したい場所に指定
service起動
pip installのとこでrootでインストールした場合は
$ sudo service supervisor start
現在のユーザーでインストールした場合はsudo要らないかも
注意
- uwsgiはコマンドでデーモン化しないこと。デーモン化しちゃうとコントロール出来ない
- pillowをインストールできないと怒られることがある。必要なライブラリはUbuntu14なら、zlib1g-dev, libtiff5-dev, libjpeg8-dev, libfreetype6-dev, liblcms2-dev, libwebp-dev, tcl8.6-dev, tk8.6-dev, python-tk
- パーミッションに気をつける。ソケットとかログとか