Supervisor用来管理Python程序的运维很方便。本文环境为CentOS。
安装
很简单,直接:
pip install supervisor
配置、启动
生成配置,并修改:
echo_supervisord_conf > /etc/supervisord.conf
vim /etc/supervisord.conf
在第一屏的下面修改下管理页面的配置,自行设置下端口、用户名密码:
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0:9001 ; ip_address:port specifier, *:port for all iface
username=admin ; default is no username (open server)
password=admin ; default is no password (open server)
再翻到最后,修改下Python程序配置文件所在目录,看个人喜好选择:
[include]
;files = relative/directory/*.ini
files = /etc/supervisord.d/*.conf ;第一种
;files = /data/supervisor/conf.d/*.conf ;第二种
然后启动:
supervisord -c /etc/supervisord.conf
通过http://yourip:9001访问管理页面,如图,当然你的现在应该没有程序:

配置Python程序
假设你有个程序叫myapp.py,平时是这么运行:
cd /root/projects/apps
python myapp.py --arg1 argvalue1 --arg2 argvalue2
那么,就先进入配置目录,添加配置文件:
cd /etc/supervisord.d/
vim myapp.conf
在myapp.conf里添加如下配置:
[program:myapp]
directory = /root/projects/apps ; 程序的启动目录
command = python myapp.py --arg1 argvalue1 --arg2 argvalue2 ; 启动命令
autostart = false ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = root ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
#stdout_logfile = /data/logs/supervisor/myapp.log
这个配置可以1个程序1份配置,也可以把所有配置写在同一个文件里。保存退出,重启supervisor:
supervisorctl reload
supervisorctl -c /etc/supervisord.conf # 或者这个
不过我不是很喜欢这个supervisorctl,觉得还是直接kill掉supervisord的进程,然后supervisord -c /etc/supervisord.conf
比较好。
ps aux|grep supervisord # 记住进程号,比如1234
kill 1234
supervisord -c /etc/supervisord.conf
这里如有问题,可以看后文。如果配置有变动可以使用这个命令:
supervisorctl update # 重新载入配置
设置开机启动(不是很必要)
如果想开机启动supervisor,就vim /etc/rc.local
,添加一行:
/usr/bin/supervisord -c /etc/supervisord.conf
或者在/usr/lib/systemd/system/目录下新建supervisord.service文件,输入如下内容:
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/local/bin/supervisord shutdown
ExecReload=/usr/local/bin/supervisord reload
killMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
然后通过systemctl enable supervisord
开启,并验证:systemctl is-enabled supervisord
。
管理
可以使用supervisorctl命令(不喜欢),或者去管理页面就行了,很简单。
错误
有时候启动或者重启的时候,会发生unix:///tmp/supervisor.sock no such file
错误,如图:

这时候,修改下/etc/supervisord.conf,一共4处。



然后,进入各目录,使用touch建立相应的文件,可能需要改权限,如:
touch /var/run/supervisor.sock
chmod 777 /var/run/supervisor.sock
touch /var/run/supervisord.pid
touch /var/log/supervisor/supervisord.log
3个文件都弄完,再重新启动,跟之前一样。
ps aux|grep supervisord # 记住进程号,比如1234
kill 1234
supervisord -c /etc/supervisord.conf
结束
一个简单的程序,需要用户不停的排错,觉得不是很友好,有点乱。不过Ok,够用了。
网友评论