当前位置: 首页 > Linux

Supervisor进程管理工具安装配置

时间:2023-04-06 03:28:42 Linux

1.背景1.1概述Supervisor是一个用Python编写的进程管理工具,可以很方便地用于启动、重启和关闭进程(不仅仅是Python进程)。除了对单个进程的控制外,还可以同时启动和关闭多个进程。例如,不幸的是,服务器出了问题,所有应用程序都被杀死了。这时,你可以使用supervisor同时启动所有的应用程序,而不用一个一个地敲命令。启动。可以说是一个很好的替代系统的nohup...&或者系统服务systemdSupervisor是相当强大的,提供了非常多的功能,但我们可能只需要用到其中的一小部分。安装完成后,就可以根据需要编写配置文件了。为了方便,我们把配置分成两部分:supervisord(supervisor是一个C/S模型程序,是server端,对应client端:supervisorctl)和应用程序(也就是我们要管理的程序).Supervisor只能管理前台运行的程序,所以如果应用有后台运行的选项,需要关闭。1.2环境CnetOS7Python2.X2。安装1.使用Python的Setuptools包安装sudoyum-yinstallpython-setuptoolssudoeasy_installsupervisor2。查看安装结果supervisord-v3.3.4默认安装的版本是最新版本(3.3.4)3.生成配置文件supervisord.conf,如果不加路径,默认生成到用户目录~/supervisord.confecho_supervisord_conf>supervisord.conf4.创建Supervisor的工作目录mkdir~/developer/supervisormkdir~/developer/supervisor/conf.dmv~/supervisord.conf~/developer/supervisor5.编辑配置文件vim~/developer/supervisor/supervisord.conf修改include配置,去掉注释,include中的文件是自己配置文件的存放地址。[include]files=/home/ling/developer/supervisor/conf.d/*.confconf.d为应用配置文件存放目录3.启动服务sudosupervisord-c~/developer/supervisor/supervisord.conf1.查看服务ps-ef|grepsupervisordling34191002:50?00:00:00/usr/bin/python/usr/bin/supervisord-c/home/ling/developer/supervisor/supervisord.conf2。关闭主管sudosupervisorctlshutdown4。程序配置文件配置说明;*为必填项目;*[程序:应用程序名称][程序:猫];*命令路径,如果是python启动的程序应该是python/home/test.py,;不建议放在/home/user/,一般情况下,非user用户无法访问command=/bin/cat;当numprocs为1时,process_name=%(program_name)s;当numprocs>=2,%(program_name)s_%(process_num)02dprocess_name=%(program_name)s;使用supervisor还有一个好处就是可以快速开启多个进程,配置参数如下:进程数是指同一个配置开启一个线程。numprocs=1;执行目录,如果有/home/supervisor_test/test1.py;将目录设置为/home/supervisor_test;那么command只需要设置为pythontest1.py;否则command必须设置为绝对执行目录directory=/tmp;Mask:----w--w-,rwxr-xw-xumask=022转换后;优先级,数值越高,最后启动,最先关闭,默认值为999priority=999;如果为true,当supervisor启动时,程序会自动启动autostart=true;*自动重启autorestart=true;开始延时执行,默认1秒startsecs=10;启动尝试次数,默认3次startretries=3;当exitcode为0,2时,执行重启,默认值0,2exitcodes=0,2;停止信号,默认TERM;interrupt:INT(类似Ctrl+C)(kill-INTpid),退出后会写入文件或日志(推荐);终止:TERM(kill-TERMpid);挂:HUP(kill-HUPpid),注意和Ctrl+Z/kill-stoppid不同;冷静地停止:QUIT(kill-QUITpid);KILL,USR1,USR2others查看命令(kill-l),说明1stopsignal=TERMstopwaitsecs=10;*以root用户身份执行user=root;有时候Supervisor托管的程序会有子进程(比如Tornado),如果只是主进程被kill掉,子进程就有可能成为孤儿进程。;通过这两个配置(改为true)保证所有子进程都能正确停止,默认为false:stopasgroup=falsekillasgroup=false;redirect,将stderr重定向到stdout,默认false;重定向标准错误=假;标准日志输出stdout_logfile=/a/path;标准日志文件大小,默认50MBstdout_logfile_maxbytes=1MB;标准日志文件大小,默认50MBstdout_logfile_backups=10stdout_capture_maxbytes=1MB;标准日志输出stderr_logfile=/a/pathstderr_logfile_maxbytes=1MBstderr_logfile_backups=10stderr_capture_capture_environmentvariablesetting=A="1",B="2"serverurl=AUTO5.supervisorctl使用配置文件立即生效:修改配置文件生效,autostart=true的程序会自动启动sudosupervisorctlupdate或sudosupervisorctlreload查看后台进程sudosupervisorctlstatuscontrolstheapplication启动所有应用sudosupervisorctlstartall关闭所有应用sudosupervisorctlstopall重启所有应用sudosupervisorctlrestartall替换成对应的程序名,然后启动,关闭,重启对应的程序5.示例以Jenkins为例启动流程1.编辑配置文件vim/home/ling/developer/supervisor/conf.d/jenkisn.conf并写入以下内容[program:jenkins]command=java-jarjenkins.war--httpPort=8888process_name=%(program_name)snumprocs=1directory=/home/ling/developer/jenkinsuser=lingautostart=trueautorestart=truestartsecs=10startretries=5redirect_stderr=truestdout_logfile=/home/ling/developer/jenkins/logs/jenkins-out.logstderr_logfile=/home/ling/developer/jenkins/logs/jenkins-err.logstdout_logfile_maxbytes=20MBstdout_logfile_backups=20sudosupervisorctlupdatejenkins:添加了进程组2。查看结果sudosupervisorctlstatusjenkinsRUNNINGpid4555,uptime19:21:536。故障排除supervisord的默认配置文件位于/etc/supervisord.conf下。如果使用supervisorctl,找不到配置文件,supervisorctl无法与supervisord通信。使用supervisorctl时,可能会看到如下错误http://localhost:9001refusedconnection处理解决方法:使用-c指定配置文件所在位置supervisorctl-c/path/to/supervisord.confconfstatus链接配置文件到/etc目录ln-s/path/to/supervisord.conf/etc/