Ansibleで環境構築する時にuwsgiの再起動をservice使ってやりたかったので、supervisorにuwsgiを登録し、supervisorをserviceに登録するためにsupervisorについて調べてみたメモ

色々はまったりして参考にしたのは以下のサイト

ざっくり手順

  • 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
  • パーミッションに気をつける。ソケットとかログとか