队列处理器 & 部署#
由于队列处理器都是 「常驻」 进程,若是代码改变而队列处理器没有重启,他们是不能应用新代码的。因此最简单的方式就是从新部署过程当中要重启队列处理器。你能够很优雅地
只输入 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