supervisor

supervisor是一个Python开发的通用的进程管理程序,可以管理和监控Linux上面的进程,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启,但它不能管理原本就是daemon的进程。并且supervisor本身自己也是一个python库,因此可以使用pip进行直接安装:

1
pip install supervisor

使用

supervisor管理进程依赖的相应的配置文件,配置文件可以通过命令生成:

1
echo_supervisord_conf > /app/install_files/supervisor.conf

配置文件当中有许多可以配置的选项,这里不一一列举,只给出部分配置:

1
2
3
4
5
6
7
[program:project_name]
directory = 工作目录
command = 脚本的启动命令
autostart = true
autorestart = true
user = loanward
stdout_logfile = /data/log/pro_stdout.log
  • project_name: 必须是唯一的,否则将会出现错乱
  • directory: 填写你启动脚本时的工作目录,如果你使用脚本的绝对目录,那么directory可以不设置
  • command:是执行脚本的命令,不需要使用nohup让其变为后代进程,supervisor会自动将其变为后台进程
  • autostart: 配置为True, supervisor 启动时,任务跟随启动
  • autorestart: 配置为True, 进程不存在时会自动重启, 默认重启3次,想修改重启次数,可以配置startretries, 设置最多重启的次数
  • user: 设置启动任务时所用的用户,supervisor 有必要使用root账号启动,这样才有权限配置其他启动账号
  • stdout_logfile: 配置输出日志

启动

1
supervisord -c /etc/supervisord.conf

这里路径为你当前文件所处的路径

其他命令:

1
2
3
4
5
6
supervisorctl status                         # 查看进程状态
supervisorctl stop project_name # 终止某个进程
supervisorctl start project_name # 启动某个进程
supervisorctl restart project_name # 重启某个进程
supervisorctl reread # 更新配置,根据最新的配置启动程序,会启动已经运行的程序
supervisorctl update # 更新配置,重启配置有变化的进程,不会重启那些配置没有变化

总结

当你的程序需要对程序的进程进行管理的时候,尤其是部署服务的时候,这个工具非常适合python。