在使用队列的时候,启动了监听的进程,但是进程监听一段时间之后,就自动被收回,后面才看了解到还有神器可以辅助.
Supervisor
(http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,避免了意外情况,需要手动一个个启动进程。
安装
supervisor 可以通过pip
,easy_install
安装.
首先,安装pip
yum -y install python-pip
会报错
No package python-pip available.
先安装扩展源
yum -y install epel-release
安装pip
yum -y install python-pip
yum clean all
安装 supervisor
pip install supervisor
如果有提示
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
根据提示执行命令,升级pip
pip install --upgrade pip
基础配置
安装完之后,没有配置文件,需要先把配置文件输出重定向到文件,直接在shell下使用命令
echo_supervisord_conf > /etc/supervisord.conf
指定加载配置启动
supervisord -c /etc/supervisord.conf
查看进程是否运行成功
ps aux | grep supervisord
program 配置
修改 /etc/supervisord.conf
的配置[include]
部分
[include]
files = /etc/supervisor/*.conf
新建配置目录
mkdir -p /etc/supervisor
例如,新建一个队列监听进程的管理配置
进入配置目录,新增配置
cd /etc/supervisor
vi queue.conf
配置内容
[program:queue]
directory = /var/www/yiiweb ; 程序的启动目录
command = php yii queue/listen ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = vilay ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /var/www/logs/queue_stdout.log
一份配置文件至少需要一个 [program:x]
部分的配置,来告诉 supervisord
需要管理那个进程。[program:x]
语法中的 x 表示 program name
,会在客户端(supervisorctl 或 web 界面)显示,在 supervisorctl 中通过这个值来对程序进行 start、restart、stop 等操作。
Supervisorctl 是 supervisord 的一个命令行客户端工具,启动时需要指定与 supervisord 使用同一份配置文件,否则与 supervisord 一样按照顺序查找配置文件。
supervisorctl -c /etc/supervisord.conf
上面这个命令会进入 supervisorctl 的 shell 界面,然后可以执行不同的命令了:
> status # 查看程序状态
> stop queue # 关闭 queue 程序
> start queue # 启动 queue 程序
> restart queue # 重启 queue 程序
> reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
> update # 重启配置文件修改过的程序
也可以输入 exit()
退出supervisorctl
的 shell
在centos shell下使用命令
supervisorctl status
supervisorctl stop queue
supervisorctl start queue
supervisorctl restart queue
supervisorctl reread
supervisorctl update
如果有更改配置,可以按下面命令执行试试
supervisorctl reread
supervisorctl update
supervisorctl restart queue
错误:
有次启动过程中遇到了个问题
rror: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224
解决方法:
找了下python的路径
whereis python
python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python2.7-config /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz
启动
/usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
参考文档
使用 supervisor 管理进程sor/)