当前位置: 首页 > 后端技术 > Python

Python进程管理神器——Supervisor

时间:2023-03-25 23:03:11 Python

这是我的个人博客地址。一、简介Supervisor是一个用Python开发的进程管理系统,它允许用户在Linux上监视和控制进程。它可以将一个普通的命令行进程变成一个后台守护进程,异常退出时可以自动重启。详细介绍请参考:Supervisor介绍2,安装Supervisor支持Linux和Mac,不支持Windows。本文系统为:centos,supervisor==4.2.4pip3installsupervisor安装完成后,Pythonbin目录下会有几个文件。ls/usr/local/Python38/binecho_supervisord_confsupervisorctlsupervisord注:由于pythonbin目录下添加了环境变量,所以可以直接执行这些文件。3.创建配置文件首先创建一个存放配置文件的目录:mkdirsupervisord。echo_supervisord_conf>supervisord/supervisord.conf如果报错-bash:/etc/supervisord.conf:Permissiondenied,需要切换到root用户。创建子进程配置文件路径mkdir-psupervisor/conf.d我们后面的任务,我们想把它作为一个守护进程,我们需要一个配置文件,我们把这些配置文件放在conf.d目录下。修改配置文件vimsupervisord/supervisord.conf,把最后一部分改成[include]#因为我这里是放在root用户目录下的,你也可以把其他目录files=/root/supervisord/conf.d/*。conf4.首先尝试启动supervisordsupervisord-csupervisord/supervisord.conf这样就可以启动supervisord,然后我们就可以把我们的任务交给他来守护,它会在停止的时候自动帮我们重启。查看版本supervisord-v写一个简单的shell脚本vimsupervisord/test.sh内容如下#!/bin/bashwhile:doecho`date'+%Y-%m-%d%H:%m:%s'`sleep1done简单运行,Ctrl+C退出,创建子进程配置文件vimsupervisor/conf.d/test.conftest.conf如下:[program:test]command=sh/root/supervisord/test.shpriority=999;相对启动优先级,值越小,优先级越高,默认为999autostart=true;supervisor启动时自动启动,默认为trueautorestart=true;意外退出时重启,默认为truestartsecs=10;子进程启动多少秒后,状态为running认为启动成功,默认为1startretries=3;最大尝试启动次数,默认为3exitcodes=0,2;进程的预期退出代码列表,默认为0stopsignal=QUIT;终止进程的信号,默认为TERMstopwaitsecs=10;onSIGKILL之前等待的最大秒数,默认为10user=root;设置某个用户下的uid启动程序,默认不切换用户redirect_stderr=true;是否重定向stdout和stderr,默认为falsestdout_logfile=/tmp/supervisor.stdout.log;stdout的输出文件,默认为AUTOstdout_logfile_maxbytes=50MB;stdout的最大文件大小,默认为50MBstdout_logfile_backups=10;stdout文件备份的个数,如果设置为0,则不备份,默认为10其实只需要配置3个参数,其他忽略:command=sh/root/supervisord/test.sh:oursub-进程启动命令;stdout_logfile=/tmp/supervisor.stdout.log:日志;program:test:进程名为test,如果某一天进程要停止启动等,则需要进程名;当前文件目录结构是这样的:yuminstalltr??eetreesupervisordsupervisord├──conf.d│└──test.conf├──supervisord.conf└──test.sh重新读取配置更新子进程因为我们的supervisord已经启动了,可以使用ps-ef|grepsupervisord.conf查看是否添加了子进程配置文件,需要重新加载:首先进入supervisord目录:cdsupervisord,否则执行下面的命令会有问题。supervisorctlreread再次查看进程状态supervisorctlstatusresult:testRUNNINGpid30278,uptime1:29:41名为test的进程一直作为守护进程在后台运行,我们杀掉他:kill30278然后执行supervisorctlstatus,你会发现状态立马从starting变成了running,那么supervisord的作用就已经很明显了,它可以自动帮我们自动监控任务。注:添加、删除、启动、停止子进程相关命令见附录。5.Web界面Web界面不是很有用,也就是说,如果你想启动或暂停进程,你不需要输入命令。在vimsupervisord.conf中取消注释[inet_http_server]port=*:9001;这里改成*方便调试重启supervisordsupervisorctlreload浏览器访问:linux_ip:9001。附录:supervisorctl常用命令添加某个配置文件,reloadsupervisorctlreread更改某个配置文件,reloadsupervisorctlupdaterestartsupervisordsupervisorctlreload查看所有进程状态supervisorctlstatus查看指定进程状态supervisorctlstatus启动所有子进程supervisorctlstart全部启动指定子进程supervisorctlstart重启所有子进程supervisorctlrestartallrestart指定子进程supervisorctlrestart停止所有子进程supervisorctlstopall停止指定子进程supervisorctlstop添加子进程到进程组supervisorctladd从进程组中删除子进程,需要先停止。注意:移除后需要使用reread和update重新运行进程supervisorctlreomve