th5.1 队列使用守护进程

起因

公司项目使用到了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/ 下增加一个配置文件即可  

文件内容需要修改 项目目录  日志文件名称 等

结束

很多东西只看是看不会的,需要亲自操作一遍,才发现有些事情是我们想的复杂了, 更多的是 事情并不像我们想象的那么简单

 

th5.1 队列使用守护进程

上一篇:linux基础(一)


下一篇:Ubuntu下Django环境搭建与项目创建