隊列處理器 & 部署#
由於隊列處理器都是 「常駐」 進程,若是代碼改變而隊列處理器沒有重啓,他們是不能應用新代碼的。因此最簡單的方式就是從新部署過程當中要重啓隊列處理器。你能夠很優雅地
只輸入 queue:restart 來重啓全部隊列處理器。php
php artisan queue:restart
這個命令將會告訴全部隊列處理器在執行完當前任務後結束進程,這樣纔不會有任務丟失。由於隊列處理器在執行 queue:restart 命令時對結束進程,你應該運行一個進程管理器,
好比 Supervisor 來自動從新啓動隊列處理器laravel
Supervisor 是一個 Linux 操做系統上的進程監控軟件,它會在 queue:listen 或 queue:work 命令發生失敗後自動重啓它們。在 Ubuntu 安裝 Supervisor,能夠用如下命令:spa
sudo apt-get install supervisor
配置 Supervisor#
Supervisor 的配置文件通常是放在 /etc/supervisor/conf.d 目錄下。在這個目錄中你能夠建立任意數量的配置文件來要求 Supervisor 怎樣監控你的進程。例如咱們建立一個
laravel-queue-worker.conf 來啓動與監控一個queue:work進程:操作系統
[program:laravel-queue-worker] process_name=%(program_name)s_%(process_num)02d command=php /home/vagrant/www/ucenter/artisan queue:work autostart=true autorestart=true user=forge numprocs=8 redirect_stderr=true user=vagrant stdout_logfile=/home/vagrant/www/ucenter/worker.log
線上環境把路徑和user修改爲對應的vagrant
啓動 Supervisor#
當這個配置文件被建立後,你須要更新 Supervisor 的配置,並用如下命令來啓動該進程:rest
1 sudo supervisorctl reread
ERROR: CANT_REREAD: Invalid user name forge in section 'program:laravel-queue-worker' (file: '/etc/supervisor/conf.d/laravel-queue-worker.conf')
若執行reread報錯,在conf文件中添加user=vagrantcode
1 sudo supervisorctl update 2 sudo supervisorctl start laravel-queue-worker:*
vagrant@homestead:/etc/supervisor/conf.d$ vi laravel-queue-worker.conf vagrant@homestead:/etc/supervisor/conf.d$ sudo supervisorctl reread laravel-queue-worker: available vagrant@homestead:/etc/supervisor/conf.d$ sudo supervisorctl update laravel-queue-worker: added process group