AWS

Laravelのキューワーカをec2でsupervisorを使って自動起動

f:id:ishimotohiroaki:20180222154922p:plain

 

Laravelでキューを利用した際に、OSの再起動に自動でワーカが起動できるように設定しました。

 

まぁ、AWSでキューを使いたけりゃAmazon SQSを使えばいいじゃんという話もありますが、今回はLaravelの仕組みにあるキューを使ってみます。

このキューの起動コマンドは

$ php artisan queue:work

こんなもんどうやって自動起動させるんやねん。

と思って調べると公式マニュアルにもその方法が載ってました。

しかしこちらで紹介されている方法はUbuntuを利用しています。

Ubuntuならすんなりいくのでしょうが、ec2のAmazonLinuxでは一工夫必要でしたので紹介します。

 

 

 

supervisorのインストール

yumを使ってsupervisorをインストールしますが、あいにくAmazonのリポジトリにはsupervisorがないので、epeoのリポジトリを利用してインストールします。

 

$ sudo yum --enablerepo=epel install supervisor

 

インストールは無事完了したので、supervisor起動

$ sudo service supervisord start

Starting supervisord: Traceback (most recent call last):
File "/usr/bin/supervisord", line 2, in <module> from supervisor.supervisord import main ImportError: No module named supervisor.supervisord [FAILED]

なんやとー

インストールは成功したのに起動しないってどういうことやねん。

モジュールインポートしようとして失敗してるみたい。

 

 

 

supervisorのファイルを編集

パッケージに問題があるようなので、直接supervisorのファイルを編集します。

 

まずは、「/usr/bin/supervisorctl」から

$ sudo vi /usr/bin/supervisorctl

 

変更前

#!/usr/bin/python
from supervisor.supervisorctl import main
# __doc__ required to make supervisorctl -h work
from supervisor.supervisorctl import __doc__
main()

1行目を変更します。

 

変更後

#!/usr/bin/python26
from supervisor.supervisorctl import main
# __doc__ required to make supervisorctl -h work
from supervisor.supervisorctl import __doc__
main()

変更するのは1行目のみです。

#!/usr/bin/python → #!/usr/bin/python26 に変更するだけです。

 

 

同じ手順で、「/usr/bin/supervisord」も

$ sudo vi /usr/bin/supervisord

 

以上で編集は完了!

 

 

 

supervisorでワーカを起動する

supervisorの設定ファイルを編集し、ワーカが起動する設定を追記します。

 

$ sudo vi /etc/supervisord.conf

ファイルの最後に以下を追記します。

 

[program:worker]
command=php /home/projectname/artisan queue:work
process_name=%(program_name)s_%(process_num)02d
numprocs=2
autostart=true
autorestart=true
user=root
redirect_stderr=true
stdout_logfile=/home/projectname/storage/logs/worker.log

/home/projectnameは環境に合わせて変更をお願いします。

 

supervisordを起動します。

$ sudo service supervisord start

 

ワーカが正常に起動しているか確認

$ sudo supervisorctl status
worker         RUNNING    pid 3696, uptime 0:01:04

 

最後にsupervisordの自動起動を設定したら完了です。

$ sudo chkconfig supervisord on