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