资讯专栏INFORMATION COLUMN

Supervisor进程管理工具安装配置

马龙驹 / 3515人阅读

摘要:背景概述是一个用写的进程管理工具,可以很方便的用来启动重启关闭进程不仅仅是进程。安装完成之后,可以编写配置文件,来满足自己的需求。

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. 安装
1. 使用Python的Setuptools软件包来安装
sudo yum -y install python-setuptools
sudo easy_install supervisor
2. 查看安装结果supervisord -v
3.3.4

默认安装的版本是最新版(3.3.4)

3. 生成配置文件supervisord.conf,如果不加路径则默认生成到用户目录~/supervisord.conf
echo_supervisord_conf > supervisord.conf
4. 创建Supervisor的工作目录
mkdir ~/developer/supervisor
mkdir ~/developer/supervisor/conf.d
mv ~/supervisord.conf ~/developer/supervisor
5. 编辑配置文件vim ~/developer/supervisor/supervisord.conf

修改include配置,去除注释,include中的files为自己的配置文件存放地址。

[include]
files = /home/ling/developer/supervisor/conf.d/*.conf
conf.d为应用的配置文件存放目录
3. 启动服务
sudo supervisord -c ~/developer/supervisor/supervisord.conf
1. 查看服务
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
2. 关闭supervisor
sudo supervisorctl shutdown
4. 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=AUTO
5. 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为例启动进程

1. 编辑配置文件vim /home/ling/developer/supervisor/conf.d/jenkisn.conf,写入如下内容
[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
2. 立即生效sudo supervisorctl update
jenkins: added process group
2. 查看结果sudo supervisorctl status
jenkins                          RUNNING   pid 4555, uptime 19:21:53
6. 故障处理

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管理进程

    摘要:首发于樊浩柏科学院是一款使用开发的非常优秀的进程管理工具。它可以在类系统上让用户精确地监视与控制多组指定数量的服务进程。当监控的服务进程意外退出时,会尝试自动重启这些服务,以保持服务可用状态。安装官方提供的安装方式较多,这里采用方式安装。 首发于 樊浩柏科学院 Supervisor 是一款使用 Python 开发的非常优秀的进程管理工具。它可以在类 UNIX 系统上让用户精确地监视与控...

    buildupchao 评论0 收藏0
  • Supervisor进程管理工具安装配置

    摘要:背景概述是一个用写的进程管理工具,可以很方便的用来启动重启关闭进程不仅仅是进程。安装完成之后,可以编写配置文件,来满足自己的需求。 1. 背景 1.1 概述 Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被...

    keke 评论0 收藏0
  • 【Linux工具篇】supervisor进程管理

    摘要:非必须设置这个是设置子进程挂掉后自动重启的情况,有三个选项,和。超过这个时间,会向该子进程发送一个强制的信号。 概述 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,除了通过nohup、&、screen以外,更推荐的方法就是用Supervisor。 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,...

    timger 评论0 收藏0
  • Supervisor:简单强大的进程管理工具

    摘要:一介绍是一个下用开发的进程管理工具,提供了管理界面,通过配置需要监控的进程,可以很方便的监控并管理进程,更厉害的是,当监控的进程因为各种原因断开的时候,能自定重启该进程。 一、介绍 Supervisor是一个Linux下用Python开发的进程管理工具,提供了web管理界面,通过配置需要监控的进程,可以很方便的监控并管理进程,更厉害的是,当监控的进程因为各种原因断开的时候,能自定重启该...

    Donne 评论0 收藏0
  • centos 7 使用supervisor 管理laravel 队列

    摘要:使用开发的一个服务,是系统下的一个进程管理工具。一切就绪后,我们使用如下命令就可以启动队列进程的监听了这里值得注意的是,如果处理队列的代码更改了,需要重启的队列管理才能生效。 supervisor使用python开发的一个client/server服务,是linux/unix系统下的一个进程管理工具。它可以很方便的监听、停止、重启一个或多个进程。用supervisor管理的进程,打你...

    only_do 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<