本文转载自:使用 supervisor 管理进程
相比之前的博客,这一篇博客讲述的更加清晰简单。
使用 supervisor 管理进程
Supervisor是一个用 Python写的进程管理工具,可以很方便的用来启动、重启、关闭进程。除了对单个进程的控制,还可以同时启动、关闭多个进程,可以很方便的控制那些需要长期运行的进程,比如需要在服务器上长期运行的爬虫之类,会在程序出错以后自动重启。
1.安装
ubuntu下apt安装
sudo apt install supervisor
pip安装方式
sudo pip install supervisor
2.配置
创建配置文件
supervisor提供了一个快速产生配置文件的方法
echo_supervisord_conf > /etc/supervisord.conf
如果没有root权限可以使用
echo_supervisord_conf > supervisord.conf
在当前目录产生,然后用supervisor -c supervisord.conf
来启动服务
查看 supervisord 是否在运行:
ps -aux | grep supervisord
3.应用配置
至此,supervisor已经安装完成,下面需要将应用添加进去,可以在刚刚的生成文件中直接添加命令,但是不推荐这么做,推荐使用以下的做法。
在supervisor.conf
中取消注释掉以下命令(一般位于结尾)
;[include]
;files = relative/directory/*.ini
改为
[include]
files = /etc/supervisor/*.ini
在/etc
目录下创建supervisor
文件夹,在其下建立program.ini
[program:serialrecv]
directory = /home/jiang/program ; 程序的启动目录
command = python serialrecv.py ; 运行的指令
autostart = true ; 在 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 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
启动supervisor
sudo supervisord
监控应用运行情况
sudo supervisorctl
显示如下界面
supdervisor>
运行status
可以看到应用运行状态,start <program name>
可以启动应用,stop <program name>
停止应用,start all
和stop all
可以启动和停止所有应用。
4.问题
1.可能会遇到unix:///tmp/supervisor.sock not found
,重新启动supervisordsudo supervisord
即可
2.无法开机启动
在/etc/rc.local
添加启动命令sudo supervisord
于exit 0
之前即可。
作者:Pokerpoke
链接:https://www.jianshu.com/p/744f7f235a92
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。