はじめに
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ファイルに書き出しまくっているので、もう少しわかりやすいところへ書き出します(任意で変更してください)
[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
[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についての設定は完了です。お疲れさまでした。