在使用队列的时候,启动了监听的进程,但是进程监听一段时间之后,就自动被收回,后面才看了解到还有神器可以辅助.

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/)