何故記事を書いたのか?
CentOS6.9の環境にLaravel5.4をインストールして、キューを使いたいという状況だった。
(Laravelのドキュメントには、キューを使うときは、Supervisorでデーモン化しましょうみたいなことが書いてある)
しかし、この手順はSupervisor3系を前提にされている様子。
とあるサイトで見つけた内容を鵜呑みにすれば、Supervisor2系には[include]設定(/etc/supervisor/conf.d/に各ジョブのconfファイル置く使い方)ができないとか。
ということで、yumでSupervisorをインストールすると2系が入ってしまうので、3系をインストールする手順をログする。
インストール手順
python-pipのインストール
Supervisorはpythonのパッケージになっているということで、yumではなくpython-pipでもインストールできる。
yum -y install python-pip
Supervisorのインストール
pip install supervisor
インストールをログを見ていてもわかるが、投稿時点では3.3.4がインストールされた。
# supervisord -v
3.3.4
依存するライブラリが最新だと、エラーになる場合があるとのことで、参考にしたサイトに従って下記のパッケージをダウングレード。
pip install meld3==1.0.0
設定ファイルを/etcに作成
yumでインストールすると作成される設定ファイルは、pipでのインストールでは作成されない。
→下記コマンドで作成される。
echo_supervisord_conf > /etc/supervisord.conf
/etc/supervisor/conf.d/の下のconfファイルを読み込む設定
/etc/supervisord.confでコメントアウトされている[include]を次のように書き換える。
[include]
files = /etc/supervisor/conf.d/*.conf
ここでよくわからないのは、Laravelのドキュメントでは「.confが普通だよ」と言っているが、コメントアウトされていた文言は、「.ini」だった。
私はconf派なのでconfにしたが、世の中的にはini派が多そう。
Supervisorで管理したいプロセスの設定
一応、プロセスの設定についても記載。
上記のパスで読み込むからということで、/etc/supervisor/conf.d/xxxx.confのようなファイルを次の内容で作成する。(日本語文字列を書き換える)
[program:ワーカー名]
process_name=%(program_name)s_%(process_num)02d
command=実行したいコマンドなど
autostart=true
autorestart=true
user=実行したいユーザ
numprocs=プロセスの数(上記のコマンドを複数起動ができる)
redirect_stderr=true
stdout_logfile=フルパスで出力するログファイルを指定
serviceコマンドで使えるように/etc/init.dのスクリプトを作成する
githubでスクリプトを公開されている方がいらっしゃるので、使わせてもらう。
curl -o /etc/rc.d/init.d/supervisord https://raw.githubusercontent.com/Supervisor/initscripts/master/redhat-init-equeffelec
chmod 755 /etc/rc.d/init.d/supervisord
chkconfig --add supervisord
動作確認
起動
次のコマンドで起動。
service supervisord start
停止
なんとSupervisorのserviceコマンドによるstopでは停止できない。
止めるときは下記のコマンド。
pkill supervisord
要するにプロセスを直接killしている。
(stack overflowでも「killしなさいよ」という情報にぶち当たった)
参考
https://hawksnowlog.blogspot.jp/2017/03/install-supervisor3-on-centos6.html
https://qiita.com/yushin/items/15f4f90c5663710dbd56
https://github.com/Supervisor/initscripts/blob/master/redhat-init-equeffelec