[Laravel] 使用Supervisor執行Laravel的Queue Worker
本文最後更新於:2024年5月30日 晚上
在使用laravel中的Queue job的時候,除了程式本身寫好之外
伺服器環境還會需要確保Laravel的queue:work
指令可以持續進行
如果中斷還可以重新啟動
這個時候就會需要用到Supervisor這個工具了
一、安裝Supervisor
apt update
apt install supervisor
二、啟動Supervisor
# supervisord -c <設定檔路徑> (預設/etc/supervisor/supervisord.conf)
sudo supervisord -c /etc/supervisor/supervisord.conf
三、建立queue worker設定檔
cd /etc/supervisor/conf.d
vim laravel-worker.conf
設定檔內容(註解要刪除)
[program:laravel-worker-my-project]
process_name=%(program_name)s_%(process_num)02d
# command=php <專案資料夾路徑>/artisan queue:work --sleep=<每次嘗試間隔> --tries=<最多嘗試次數>
command=php /var/www/my-project/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
# 執行使用者,建議用與web server相同的使用者,並使用root權限啟動supervisor避免權限問題
user=root
# 幾個執行續
numprocs=2
startsecs=0
redirect_stderr=true
# stdout_logfile=<log檔案路徑>
stdout_logfile=/var/log/supervisor/laravel-worker-my-project.log
# logfile_maxbytes=<LOG檔案byte上限>(範例為10MB)
logfile_maxbytes=10485760
stopwaitsecs=3600
四、載入設定檔並啟用
supervisorctl reread
supervisorctl update
supervisorctl restart laravel-worker-my-project:*
# 也可以使用all指定所有設定檔
supervisorctl restart all
五、查看服務是否啟用
supervisorctl status
六、其他操作
# 停止
# supervisorctl stop <program_name>
supervisorctl stop laravel-worker-my-project:*
supervisorctl stop all
# 開始
# supervisorctl start <program_name>
supervisorctl start laravel-worker-my-project:*
supervisorctl start all
環境
- OS: Ubuntu 18.04
參考資料
[Laravel] 使用Supervisor執行Laravel的Queue Worker
https://hankz1108.github.io/posts/20231105-laravel-queue-with-supervisor/