起因
公司项目使用到了redis队列, 使用队列就会遇到队列被干掉的情况, 所以需要使用守护进程
过程
当项目上线之后, 需要在子项目根目录启动队列
php think queue:listen
但是这种写法, 一旦窗口关闭, 队列就会取消, 所以我就想了一个取消救国的方法, 让它在后台运行
nohup php think queue:listen 2 > &1 &
使用nohup 可以是该命令在后台运行,并把所有输出都被重定向到一个名为nohup.out的文件中
但是这样做还是避免不了 这个进程意外关闭或者因为其他原因死掉
所以最好还是选择使用守护进程
第一步:在centos上安装守护进程supersivor
# yum install epel-release # yum install supervisor -y //设置成开机自动启动 # systemctl enable supervisord
第二步:设置守护进程的运行目录,日志目录,配置文件
守护进程有自己默认的运行目录,日志目录, 但是为了管理方便, 我们可以自己设置这些目录
cd /var/ mkdir supervisor cd supervisor/ mkdir run # 运行目录 mkdir log # 日志目录 mkdir conf # 配置目录 也是需要执行的命令的配置目录
第三步:修改配置文件
配置文件在 /etc/supervisord.conf
; 将supervisor.sock 的路径换成如下 [unix_http_server] file=/var/supervisor/run/supervisor.sock ; (the path to the socket file) ; 将supervisord.log 和 supervisord.pid 的路径换成如下 [supervisord] logfile=/var/supervisor/log/supervisord.log ; (main log file;default $CWD/supervisord.log) pidfile=/var/supervisor/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) ; 将supervisor.sock 的路径换成如下 [supervisorctl] serverurl=unix:///var/supervisor/run/supervisor.sock ; use a unix:// URL for a unix socket ; 将最底部的files路径换成如下 配置文件的目录 [include] files = /var/supervisor/conf/*.conf
第四步:配置自己需要运行的命令 在自己创建的配置目录下 /var/supervisor/conf
这一步需要特别注意
一般网上的提供的配置文件如下
但是这样写会报一些错误, 例如目录找不到啊 不是一个有效的布尔值啊 之类的
cd /var/supervisor/conf vim work_queue.conf # 插入代码 [program:queue_worker] ;项目名称 directory = /var/tp5.1 ; 程序的启动目录,项目根目录的上一级 command = php think queue:listen ; 启动命令 process_name=%(program_name)s_%(process_num)02d numprocs = 3 ; 开启的进程数量 autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 user = root ; 用哪个用户启动 redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 50MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数 ; stdout 日志文件,需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile = /var/supervisor/log/queue_worker.log loglevel=info
经过亲自验证,在启动守护进程时需要将上面的配置的注释以及 ‘;’ 去掉
# 插入代码 [program:queue_worker] directory=/var/tp5.1 command=php think queue:listen process_name=%(program_name)s_%(process_num)02d numprocs=3 autostart=true startsecs=5 autorestart=true startretries=3 user=root redirect_stderr=true stdout_logfile_maxbytes=50MB stdout_logfile_backups=20 stdout_logfile=/var/supervisor/log/queue_worker.log loglevel=info
第五步:启动守护进程
systemctl start supervisord
systemctl stop supervisord
systemctl restart supervisord
第六步:测试
可以打开日志文件 /va/supervisor/log/ 查看日志 是否报错
也可以使用 ps 查看命令是否运行 ps -aux|grep php
第七步:提示
如果你有多个项目怎么半,特别是在测试环境, 一般都时多个项目在测试服务器
这个时候只需要在 /var/supervisor/conf/ 下增加一个配置文件即可
文件内容需要修改 项目目录 日志文件名称 等
结束
很多东西只看是看不会的,需要亲自操作一遍,才发现有些事情是我们想的复杂了, 更多的是 事情并不像我们想象的那么简单