美文网首页
Python使用Supervisor极简例子

Python使用Supervisor极简例子

作者: 赤色要塞满了 | 来源:发表于2019-11-14 16:16 被阅读0次

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访问管理页面,如图,当然你的现在应该没有程序:

image.png

配置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错误,如图:

image.png
这时候,修改下/etc/supervisord.conf,一共4处。
image.png
image.png
image.png
然后,进入各目录,使用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,够用了。

相关文章

网友评论

      本文标题:Python使用Supervisor极简例子

      本文链接:https://www.haomeiwen.com/subject/ohjrictx.html