CentOS6.x
supervisor
laravel5.5

[Laravel5.5]queue:workをsupervisorでデーモン化

はじめに

laravel5.5のqueueをdatabaseドライバーで利用した。
そのための php artisan queue:work コマンドをデーモン化するにあたり、ちゃんと永続化処理をしたかったので公式に推奨されているSupervisorを利用しようとした。

$ sudo apt-get install supervisor
-bash: apt-get: command not found

・・・!!!
CentOS6.*上のためapt-getコマンドがデフォルトで入ってないのは当然かもしれない。

というところから始まる、supervisor導入からワーカー起動までの忘備録です。

なお、環境は

CentOS 6.9
PHP 7.0
Laravel 5.5
python 2.6.6

となっております。それ以外は未確認ですのでほかのページへ行ってください。

まずはsupervisorのインストール

supervisorはyumではバージョンが古いため、pythonのインストーラーから直接インストールする必要があります。
すでにyumで入れてしまっている場合はyum remove supervisorで消してください。
残したままだとeasy_installで導入しているつもりが古いままになってしまいます。

$ sudo yum install python-setuptools
$ sudo easy_install supervisor
$ supervisord -v
3.3.0

-vでバージョンが出れば成功です。
もしもこの時点でhelpを見ろと言われた場合は、バージョンが2系となっている可能性があります。確認してください。

コンフィグ設定

まずはデフォルトのコンフィグ設定を自動生成します。

$ sudo echo_supervisord_conf > /etc/supervisord.conf

これでコンフィグ設定を作れたはずです。
しかし$ sudo vim /etc/supervisord.confで実際に覗くとデフォルトのままではtmpファイルに書き出しまくっているので、もう少しわかりやすいところへ書き出します(任意で変更してください)

supervisord.conf
[unix_http_server]
file=/var/run/supervisor.sock

[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1:9001        ; ip_address:port specifier, *:port for all iface

[supervisord]
logfile=/var/log/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
pidfile=/var/run/supervisord.pid
nodaemon=false               ; start in foreground if true; default false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 200

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket

[include]
files=/etc/supervisord/*.ini

program設定は直接書いても良いようですが、別ファイルに分けたほうが個人的に気持ちが楽なのでinclude設定で読み込みます。

参考サイト
supervisorをCentOS6.5にインストールしたメモ

また、includeで設定したディレクトリにlaravel-workerを作成します。

$ sudo mkdir /etc/supervisord/
$ sudo vim /etc/supervisord/laravel-woker.ini
laravel-woker.ini
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log

以上でコンフィグ設定は終了。

supervisorをサービスで起動する

そのままchkconfig -add supervisordとやってもsupervisordは存在しないと言われてしまうので、動作するようにします。
Init Scriptを公開している人がいるため、それを利用しましょう。
Supervisor/initscripts

$ vim /etc/rc.d/init.d/supervisord

で、ファイルを開き、直接ソースコードを書き込みます。
また権限を変更してサービスに登録しましょう。

$ sudo chmod 755 /etc/rc.d/init.d/supervisord
$ sudo chkconfig --add supervisord

参考サイト
Supervisorで簡単にデーモン化

実際に $ sudo service supervisrod startとやってみて動作したら成功です。
もしもconfigにエラーが発生していなかったら、この時点でlaravel-wokerも動作したことを示す出力が出るはずです。

supervisorctlでデーモンを確認する。

supervisorにはコマンドラインベースでデーモンの動作状況を確認するsupervisorctlというアプリケーションが入っています。
では動作を確認してみましょう。

$ sudo supervisorctl status
laravel-woker:laravel-woker_00   RUNNING   pid 13698, uptime 0:55:18

問題なく動いているようです。(私の手元ではワーカー1つだけだったため1行で終了ですが、Laravelの設定どおりにやると8行くらい出るかもしれません)

以上でsupervisorについての設定は完了です。お疲れさまでした。