supervisor管理python进程

前言

        平时开发调试中使用conda环境,项目比较多环境多,而且命令繁杂,每一次启动项目都可能会因为忘记启动方式而频繁报错。现在可以通过supervisor来管理,只需要配置几个文件,就可以轻松通过简单一致的命令启动工程,并且保持在后台运行,如果程序异常中断,还可以自动重启。

安装

apt install supervisor

生成配置文件

echo_supervisord_conf > /etc/supervisord.conf

在配置文件里修改配置内容,一般在配置文件的最后面

supervisor管理python进程_第1张图片

[include] files = /etc/supervisord.d/*.conf

为每个工程配置conf

/etc/supervisord.d是一个所有进程配置的父文件夹,比如有project1,project2,project3,那么/etc/supervisord.d文件夹中就会有project1.conf,project2.conf,project3.conf

创建配置文件夹

mkdir /etc/supervisord.d/

配置相关信息

vim /etc/supervisord.d/project1.conf

示例配置内容

[supervisord] 
strip_ansi = true 

[program:project] 
directory = /data/ai_lab/msf/ComfyUI 
command = /home/username/miniconda3/envs/project_env/bin/python main.py --listen 
autostart = true 
autorestart = true 
user = root 
stdout_logfile = /data/project.log
  1. project_name 必须是唯一的,否则将会出现错乱

  2. directory 填写你启动脚本时的工作目录,如果你使用脚本的绝对目录,那么directory可以不设置

  3. command是执行脚本的命令,不需要使用nohup让其变为后代进程,supervisor会自动将其变为后台进程,command最好是虚拟环境bin目录下的python解释器的绝对路径,否则可能会找错解释器路径,导致程序报错。

  4. autostart 配置为True, supervisor 启动时,任务跟随启动

  5. autorestart 配置为True, 进程不存在时会自动重启, 默认重启3次,想修改重启次数,可以配置startretries, 设置最多重启的次数

  6. user 设置启动任务时所用的用户,supervisor 有必要使用root账号启动,这样才有权限配置其他启动账号

  7. stdout_logfile 配置输出日志,可以将所有进程日志存放在一个好找的文件夹,或者都存放到每一个工程的目录下,但为了方便找,一般统一放在一个目录里。

启动supervisor

supervisord -c /etc/supervisord.conf

supervisorctl管理进程

supervisorctl 是 supervisord 的一个命令行客户端工具,使用supervisorctl可以遍历的对进程进行管理,支持的命令如下

project是示例配置内容中[program:project]的project

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

参考链接:

https://zhuanlan.zhihu.com/p/264111843

https://github.com/Supervisor/supervisor/issues/85

http://supervisord.org/configuration.html#supervisord-section-values

https://blog.csdn.net/codeswarrior/article/details/107511960

你可能感兴趣的:(python,服务器,linux)