摘要:背景概述是一个用写的进程管理工具,可以很方便的用来启动重启关闭进程不仅仅是进程。安装完成之后,可以编写配置文件,来满足自己的需求。
1. 背景 1.1 概述
Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。
可以说是很好的替换的系统的nohup ...... &或系统服务systemd
Supervisor相当强大,提供了很丰富的功能,不过我们可能只需要用到其中一小部分。安装完成之后,可以编写配置文件,来满足自己的需求。为了方便,我们把配置分成两部分:supervisord(supervisor是一个C/S模型的程序,这是server端,对应的有client端:supervisorctl)和应用程序(即我们要管理的程序)。
Supervisor 只能管理在前台运行的程序,所以如果应用程序有后台运行的选项,需要关闭。
1.2 环境Cnet OS 7
Python 2.X
2. 安装sudo yum -y install python-setuptools sudo easy_install supervisor
3.3.4
默认安装的版本是最新版(3.3.4)
echo_supervisord_conf > supervisord.conf
mkdir ~/developer/supervisor mkdir ~/developer/supervisor/conf.d mv ~/supervisord.conf ~/developer/supervisor
修改include配置,去除注释,include中的files为自己的配置文件存放地址。
[include] files = /home/ling/developer/supervisor/conf.d/*.conf
conf.d为应用的配置文件存放目录3. 启动服务
sudo supervisord -c ~/developer/supervisor/supervisord.conf
ps -ef | grep supervisord ling 3419 1 0 02:50 ? 00:00:00 /usr/bin/python /usr/bin/supervisord -c /home/ling/developer/supervisor/supervisord.conf
sudo supervisorctl shutdown4. program配置文件
配置说明
;*为必须填写项 ;*[program:应用名称] [program:cat] ;*命令路径,如果使用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)02d process_name=%(program_name)s ;使用supervisor还有一个更大的好处就是,可以快速开启多个进程,配置参数如下: ;进程数量,表示对同一个配置开启1个线程。 numprocs=1 ;执行目录,若有/home/supervisor_test/test1.py ;将directory设置成/home/supervisor_test ;则command只需设置成python test1.py ;否则command必须设置成绝对执行目录 directory=/tmp ;掩码:--- -w- -w-, 转换后rwx r-x w-x umask=022 ;优先级,值越高,最后启动,最先被关闭,默认值999 priority=999 ;如果是true,当supervisor启动时,程序将会自动启动 autostart=true ;*自动重启 autorestart=true ;启动延时执行,默认1秒 startsecs=10 ;启动尝试次数,默认3次 startretries=3 ;当退出码是0,2时,执行重启,默认值0,2 exitcodes=0,2 ;停止信号,默认TERM ;中断:INT(类似于Ctrl+C)(kill -INT pid),退出后会将写文件或日志(推荐) ;终止:TERM(kill -TERM pid) ;挂起:HUP(kill -HUP pid),注意与Ctrl+Z/kill -stop pid不同 ;从容停止:QUIT(kill -QUIT pid) ;KILL, USR1, USR2其他见命令(kill -l),说明1 stopsignal=TERM stopwaitsecs=10 ;*以root用户执行 user=root ;有时候用 Supervisor 托管的程序还会有子进程(如 Tornado),如果只杀死主进程,子进程就可能变成孤儿进程。 ;通过这两项配置(改为true)来确保所有子进程都能正确停止,默认是false: stopasgroup=false killasgroup=false ;重定向,把stderr重定向到stdout,默认false; redirect_stderr=false ;标准日志输出 stdout_logfile=/a/path ;标准日志文件大小,默认50MB stdout_logfile_maxbytes=1MB ;标准日志文件大小,默认50MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB ;标准日志输出 stderr_logfile=/a/path stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB ;环境变量设置 environment=A="1",B="2" serverurl=AUTO5. supervisorctl使用
修改的配置文件生效,设置autostart=true的程序,会自动启动
sudo supervisorctl update
或
sudo supervisorctl reload
sudo supervisorctl status
启动全部应用sudo supervisorctl start all
关闭全部应用sudo supervisorctl stop all
重启全部应用sudo supervisorctl restart all
将all换成相应的program名称,则就是对相应的程序进行启动、关闭和重启5. 实例
以Jenkins为例启动进程
[program:jenkins] command=java -jar jenkins.war --httpPort=8888 process_name=%(program_name)s numprocs=1 directory=/home/ling/developer/jenkins user=ling autostart=true autorestart=true startsecs=10 startretries=5 redirect_stderr = true stdout_logfile=/home/ling/developer/jenkins/logs/jenkins-out.log stderr_logfile=/home/ling/developer/jenkins/logs/jenkins-err.log stdout_logfile_maxbytes = 20MB stdout_logfile_backups = 20
jenkins: added process group
jenkins RUNNING pid 4555, uptime 19:21:536. 故障处理
supervisord的默认配置文件是放在/etc/supervisord.conf下面的,如果使用supervisorctl无法找到配置文件,supervisorctl 无法获知与supervisord 该如何通讯,使用supervisorctl时你可能会看到如下错误
http://localhost:9001 refused connection
处理解决办法:
使用-c指定配置文件位置
supervisorctl -c /path/to/supervisord.conf status
将配置文件链接到/etc目录下
ln -s /path/to/supervisord.conf /etc/
本文首发于凌风博客:Supervisor进程管理工具安装配置
作者:凌风
Supervisor GitHub
Supervisor 官网
Supervisor 官方配置文档
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/45991.html
摘要:首发于樊浩柏科学院是一款使用开发的非常优秀的进程管理工具。它可以在类系统上让用户精确地监视与控制多组指定数量的服务进程。当监控的服务进程意外退出时,会尝试自动重启这些服务,以保持服务可用状态。安装官方提供的安装方式较多,这里采用方式安装。 首发于 樊浩柏科学院 Supervisor 是一款使用 Python 开发的非常优秀的进程管理工具。它可以在类 UNIX 系统上让用户精确地监视与控...
摘要:背景概述是一个用写的进程管理工具,可以很方便的用来启动重启关闭进程不仅仅是进程。安装完成之后,可以编写配置文件,来满足自己的需求。 1. 背景 1.1 概述 Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被...
摘要:非必须设置这个是设置子进程挂掉后自动重启的情况,有三个选项,和。超过这个时间,会向该子进程发送一个强制的信号。 概述 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,除了通过nohup、&、screen以外,更推荐的方法就是用Supervisor。 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,...
摘要:一介绍是一个下用开发的进程管理工具,提供了管理界面,通过配置需要监控的进程,可以很方便的监控并管理进程,更厉害的是,当监控的进程因为各种原因断开的时候,能自定重启该进程。 一、介绍 Supervisor是一个Linux下用Python开发的进程管理工具,提供了web管理界面,通过配置需要监控的进程,可以很方便的监控并管理进程,更厉害的是,当监控的进程因为各种原因断开的时候,能自定重启该...
摘要:使用开发的一个服务,是系统下的一个进程管理工具。一切就绪后,我们使用如下命令就可以启动队列进程的监听了这里值得注意的是,如果处理队列的代码更改了,需要重启的队列管理才能生效。 supervisor使用python开发的一个client/server服务,是linux/unix系统下的一个进程管理工具。它可以很方便的监听、停止、重启一个或多个进程。用supervisor管理的进程,打你...
阅读 1605·2021-11-24 10:21
阅读 1559·2021-11-12 10:35
阅读 3191·2021-10-12 10:12
阅读 1005·2021-09-22 15:25
阅读 2983·2019-08-30 15:55
阅读 528·2019-08-30 15:54
阅读 3353·2019-08-30 14:20
阅读 1549·2019-08-30 14:06