队列处理器 & 部署#
因为队列处理器都是 「常驻」 进程,如果代码改变而队列处理器没有重启,他们是不能应用新代码的。所以最简单的方式就是重新部署过程中要重启队列处理器。你可以很优雅地
只输入 queue:restart 来重启所有队列处理器。
php artisan queue:restart
这个命令将会告诉所有队列处理器在执行完当前任务后结束进程,这样才不会有任务丢失。因为队列处理器在执行 queue:restart 命令时对结束进程,你应该运行一个进程管理器,
比如 Supervisor 来自动重新启动队列处理器
Supervisor 是一个 Linux 操作系统上的进程监控软件,它会在 queue:listen 或 queue:work 命令发生失败后自动重启它们。在 Ubuntu 安装 Supervisor,可以用以下命令:
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修改成对应的
启动 Supervisor#
当这个配置文件被创建后,你需要更新 Supervisor 的配置,并用以下命令来启动该进程:
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=vagrant
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