2019-11-25 18:31:45
围观(3676)
上一篇文章 树洞-未来邮局开源 用到了 Laravel 的延时队列。本地调试直接在根目录执行
php artisan queue:work
就能正常执行,但是到了线上生产环境,不可能一直连着服务器终端执行上面这句代码。
所以这时候就用到了 Supervisor 守护进程。
首先安装 Supervisor
yum install supervisor
安装完成后,修改 /etc/supervisord.conf 文件,在文件末尾 [include] 上方添加代码:
[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /www/wwwroot/hole.bubaijun.com/artisan queue:work sqs --sleep=3 --tries=3 autostart=true autorestart=true user=root numprocs=8 redirect_stderr=true stdout_logfile=/www/hole.bubaijun.com/worker.log
代码解释:
[program:laravel-worker] 守护进程应用名称 process_name=%(program_name)s_%(process_num)02d python字串表达式,用来表示 supervisor 进程启动的名称 command=php /www/hole.bubaijun.com/artisan queue:work sqs --sleep=3 --tries=3 网站目录及被监控的进程启动命令 autostart=true supervisord 启动时,该进程跟着启动 autorestart=true 自动重启 user=root 以 root 的身份运行 numprocs=8 进程数 redirect_stderr=true 重定向 stderr stdout_logfile=/www/hole.bubaijun.com/worker.log 进程的日志文件
配置文件修改后,执行 sudo supervisorctl reread
如果报错:
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py
则先执行
supervisord
再依次执行
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start laravel-worker:*
完成后可以查看进程是否正常运行:
ps -ef | grep artisan
另外,博主还遇到了执行 sudo supervisorctl start laravel-worker:* 后返回错误:
laravel-worker_00: ERROR (abnormal termination)
然后将刚写入的配置,即 /etc/supervisord.conf 文件的
command=php /www/wwwroot/hole.bubaijun.com/artisan queue:work sqs --sleep=3 --tries=3
这句 改成
command=php /www/wwwroot/hole.bubaijun.com/artisan queue:work --sleep=3 --tries=3
去掉了 sqs 再次执行就好了。