Supervisor是什么
Supervisor是用Python开发的通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动
1.安装supervisor
1 | yum -y install python-setuptools |
2.生成配置文件
1 | echo_supervisord_conf > /etc/supervisord.conf |
3.修改配置文件
1 | vim /etc/supervisord.conf |
4.配置文件末尾追加
1 | [program:mywebsite] # 你的项目名 |
配置文件详解
1 | [unix_http_server] |
子进程配置文件
给需要管理的子进程(程序)编写一个配置文件,放在/etc/supervisor.d/
目录下,以.ini
作为扩展名(每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起)。
1 | #项目名 |
5.启动supervisor,同时启动子进程
supervisord -c /etc/supervisord.conf
6.进入supervisor的终端控制台,进行管理来启动或停止你的项目
supervisorctl -c /etc/supervisord.conf
7.常用命令
1 | supervisorctl status # 查看所有进程的状态 |
注:使用supervisor进程管理命令之前先启动supervisord,否则程序报错
常见问题
- unix:///var/run/supervisor.sock no such file
问题描述:安装好supervisor没有开启服务直接使用supervisorctl报的错
解决办法:supervisord -c /etc/supervisord.conf
- command中指定的进程已经起来,但supervisor还不断重启
问题描述:command中启动方式为后台启动,导致识别不到pid,然后不断重启
解决办法:supervisor无法检测后台启动进程的pid,可以将命令后面加上-g 'daemon off;'
使其前台执行,然后使用supervisor进行守护管理 - 启动了多个supervisord服务,导致无法正常关闭服务
问题描述:在运行supervisord -c /etc/supervisord.conf
之前,直接运行过supervisord -c /etc/supervisord.d/xx.conf
导致有些进程被多个superviord管理,无法正常关闭进程。
解决办法:使用ps -fe | grep supervisord
查看所有启动过的supervisord服务,kill相关的进程。 - Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
问题描述:同上,之前启动的supervisor进程未关闭;解决方法同样kill相关的进程