LoginSignup
14
22

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-11-07

はじめに

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

14
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
22