Edited at

[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についての設定は完了です。お疲れさまでした。