Linux进程管理工具Supervisor的安装配置

简介

Supervisor是用Python开发的一个Client/Server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或者多个进程。用Supervisor管理的进程,当一个进程意外被杀死,Supervisor监听到进程死亡后,会自动将它重新拉起,很方便的做到进程自动回复的功能,不再需要自己写Shell脚本控制。

​ 因为Supervisor是Python开发的,安装前先检查一下系统是否安装Python 2.4以上的版本。下面以CentOS 7环境介绍SuperVisor的安装和配置。

安装Python包管理工具

easy_install是setuptools包里带的一个命令,使用easy_install实际上是在调用setuptools来完成安装模块的工作,所以安装setuptools即可。

[root@localhost ~]# wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - | sudo python

安装Supervisor

[root@VM-0-7-centos ~]# easy_install supervisor

​ supervisor安装完成后会生成三个执行程序:supervisordsupervisorctlecho_supervisord_conf,分别是supervisor的守护进程(用于接收管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始化配置文件程序。

配置

运行supervisord服务的时候,需要指定supervisor配置文件,如果没有显示指定,默认在以下路径查找:

$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf (since Supervisor 3.3.0)
../etc/supervisord.conf (Relative to the executable)
../supervisord.conf (Relative to the executable)

$CWD表示运行supervisord程序的目录。

可以通过运行echo_supervisord_conf程序来生成supervisor的初始化配置文件,如下所示:

[root@VM-0-7-centos ~]# mkdir /etc/supervisor
[root@VM-0-7-centos ~]# echo_supervisord_conf > /etc/supervisor/supervisord.con

配置文件参数说明

supervisor的配置参数较多,下面介绍以下常用的参数配置,详细的配置和说明,请参考官方文档。

[unix_http_server]
file=/tmp/supervisor.sock ; Unix Socker文件,supervisorctl使用
;chmod=0700 ; socket文件权限
;chown=nobody:nogroup ; socket文件所属组和所有者
;username=user ; default is no username (open server)
;password=123 ; default is no password (open server) ;[inet_http_server] ; HTTP服务器,提供web管理界面
;port=127.0.0.1:9001 ; web管理后台运行的IP和端口
;username=user ; 登录管理后台的用户名
;password=123 ; 登录管理后台的密码 [supervisord]
logfile=/tmp/supervisord.log ; 主日志文件
logfile_maxbytes=50MB ; 日志文件大小,超出50M则进行切割
logfile_backups=10 ; 日志文件包保留备份数量默认为10
loglevel=info ; 日志级别,默认为INFO,其他:debug、warn、trace
pidfile=/tmp/supervisord.pid ; PID文件
nodaemon=false ; 是否在前台启动,默认是false,即以daemon的方式启动
silent=false ; no logs to stdout if true; default false
minfds=1024 ; 可以打开的文件描述符的最小值。默认1024
minprocs=200 ; 可以打开的进程数的最小值,默认为200
;umask=022 ; process file creation umask; default 022
;user=supervisord ; setuid to this UNIX account at startup; recommended if root
;identifier=supervisor ; supervisord identifier, default is 'supervisor'
;directory=/tmp ; default is not to cd during start
;nocleanup=true ; don't clean up tempfiles at start; default false
;childlogdir=/tmp ; 'AUTO' child log dir, default $TEMP
;environment=KEY="value" ; key value pairs to add to environment
;strip_ansi=false ; strip ansi escape codes in logs; def. fals [supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 通过Unix Socket链接supervisord
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式链接supervisord
;username=chris ; should be same as in [*_http_server] if set
;password=123 ; should be same as in [*_http_server] if set ;[program:theprogramname] [program:xx]是被管理的进程配置参数,xx是进程的名称
;command=/bin/cat ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1 ; number of processes copies to start (def 1)
;directory=/tmp ; directory to cwd to before exec (def no cwd)
;umask=022 ; umask for process (default None)
;priority=999 ; 进程启动优先级,默认999,值小的优先启动
;autostart=true ; 在supervisor启动的时候也启动
;startsecs=1 ; 在启动1秒后没有异常退出,就表示进程正常启动了
;startretries=3 ; 启动失败自动重试次数,默认是3
;autorestart=unexpected ; when to restart if exited after running (def: unexpected)
;exitcodes=0 ; 'expected' exit codes used with autorestart (default 0)
;stopsignal=QUIT ; signal used to kill process (default TERM)
;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false ; 默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
;killasgroup=false ; 默认为false,向进程组发送kill信号,包括紫禁城
;user=chrism ; 用哪个用户启动进程
;redirect_stderr=true ; 把stderr重定向到stdout
;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB ; stdout日志文件大小,默认50MB
;stdout_logfile_backups=10 ; stdout日志文件备份树,默认是10
;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stdout_syslog=false ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10)
;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;stderr_syslog=false ; send stderr to syslog with process name (default false)
;environment=A="1",B="2" ; process environment additions (def no adds)
;serverurl=AUTO ; override serverurl computation (childutils) ;[include]
;files = relative/directory/*.ini ; 可以指定一个或多个以.ini结束的配置文件

配置进程管理

进程管理配置参数,不建议全部写在supervisord.conf文件中,应该每个进程写一个配置文件放在include指定的目录下包含进supervisord.conf文件中。

1)创建/etc/supervisor/config.d目录,用于存放进程管理的配置文件;

2)修改/etc/supervisor/supervisord.conf中的include参数,将/etc/supercisor/conf.d目录添加到include中。

[include]
files = /etc/supervisor/config.d/*.ini

下面时配置Tomcat进程的例子:

[program:tomcat]
command=/usr/local/tomcat/bin/catalina.sh run
stdout_logfile=/usr/local/tomcat/logs/catalina.out
autostart=true
autorestart=true
startsecs=5
priority=1
stopasgroup=true
killasgroup=true

启动supervisor

[root@VM-0-7-centos ~]# supervisorctl -c /etc/supervisor/supervisord.conf

控制进程

交互终端

supervisord启动成功后,可以通过supervisorctl客户端控制进程,启动、停止、重启。运行supervisorctl命令,不加参数,会进入supervisor客户端按的交互终端,并会列出当前所管理的所有进程。

上图中的tomcat就是我们在配置文件中[program:tomcat]的名字。

输入help命令可以查看可以执行的命令列表,如果想看某个命令的作用,输入help命令名称,如help stop

stop tomcat  # 表示停止Tomcat进程
stop all # 表示停止所有进程

bash终端

supervisorctl reload  # 重启supervisor
supervisorctl status # 查看状态
supervisorctl start tomcat
supervisorctl restart tomcat
supervisorctl reread
supervisorctl update

web管理界面

如果需要开启web界面,则需要修改配置文件取消注释

[root@VM-0-7-centos logs]# vim /etc/supervisor/supervisord.conf
[inet_http_server] ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; ip_address:port specifier, *:port for all iface
;username=root ; default is no username (open server)
;password=123456 ; default is no password (open server)
[root@VM-0-7-centos logs]# supervisorctl reload

配置开启自启动supervisor

配置systemctl服务

1)进入/lib/systemd/system目录,并创建supervisor.service文件

[Unit]
Description=supervisor
After=network.target [Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s [Install]
WantedBy=multi-user.target

2)设置开机启动

[root@VM-0-7-centos ~]# systemctl enable supervisor.service
[root@VM-0-7-centos ~]# systemctl daemon-reload

3)修改文件权限为766

[root@VM-0-7-centos ~]# chmod 766 /lib/systemd/system/supervisor.service

配置service类型

#!/bin/bash
#
# supervisord This scripts turns supervisord on
#
# Author: Mike McGrath <mmcgrath@RedHat.com> (based off yumupdatesd)
#
# chkconfig: - 95 04
#
# description: supervisor is a process control utility. It has a web based
# xmlrpc interface as well as a few other nifty features.
# processname: supervisord
# config: /etc/supervisor/supervisord.conf
# pidfile: /var/run/supervisord.pid
# # source function library
. /etc/rc.d/init.d/functions RETVAL=0 start() {
echo -n $"Starting supervisord: "
daemon "supervisord -c /etc/supervisor/supervisord.conf "
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/supervisord
} stop() {
echo -n $"Stopping supervisord: "
killproc supervisord
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/supervisord
} restart() {
stop
start
} case "$1" in
start)
start
;;
stop)
stop
;;
restart|force-reload|reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/supervisord ] && restart
;;
status)
status supervisord
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
exit 1
esac exit $RETVAL

将上述脚本内容保存到/etc/rc.d/rc.local/supervisor文件中,修改文件权限为755,并设置开机启动

[root@VM-0-7-centos ~]# chmod 755 /etc/rc.d/init.d/supervisor
[root@VM-0-7-centos ~]# chkconfig supervisor on

Linux进程管理工具Supervisor的安装配置的更多相关文章

  1. Linux进程管理工具——supervisor

    介绍 Supervisord是用Python实现的一款非常实用的进程管理工具 安装 这里用源码 supervisor-.tar.gz .tar.gz cd supervisor- sudo pytho ...

  2. Linux进程管理工具 Supervisord 的安装 及 入门教程

    Supervisor是一个进程管理工具,官方的说法: 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了 ...

  3. Linux进程管理工具Supervisor

    简述 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 它是通过fork/exec的方式把这些被管 ...

  4. Linux 进程管理工具 supervisord 安装及使用

    Supervisor是用Python实现的一款非常实用的进程管理工具 1.安装过程非常简单 安装python 安装meld3-0.6.8.tar.gz 安装supervisor-3.0a12.tar. ...

  5. 进程管理工具supervisor

    1. 简介 supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构. supervisord负责读入配置文件,然后supervisor ...

  6. Linux进程管理工具

    Linux进程管理工具 Htop yum install htop 参考帮助: http://blog.csdn.net/skh2015java/article/details/53173896 Li ...

  7. linux 使用进程管理工具 supervisor

    1.supervisor是使用python进行开发的运行在linux服务器上的进程管理工具 老版本的supervisor需要运行在python2环境,如果需要使用supervisor管理python3 ...

  8. 2017.7.21 linux下进程管理工具supervisord的安装与使用

    参考来自:http://blog.haohtml.com/archives/15145 0 操作环境 1 supervisord的介绍 Supervisord是用Python实现的一款非常实用的进程管 ...

  9. Python 进程管理工具 Supervisor 使用教程

    Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...

随机推荐

  1. thymeleaf第一篇:什么是-->为什么要使用-->有啥好处这玩意

    Thymeleaf3.0版本官方地址 1 Introducing Thymeleaf Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP . ...

  2. ElasticSearch 安装与运行

    公号:码农充电站pro 主页:https://codeshellme.github.io 本节来介绍 ES 的安装. 1,下载 ES ES 是基于 Java 语言开发的,因此,要安装 ES,首先需要有 ...

  3. Shiro权限项目

    目录 环境配置 spring容器 springmvc freemarker mybatis shiro 工具类 TokenManager.java Result.java 功能实现 登录 注册 个人中 ...

  4. cf 1305 E. Kuroni and the Score Distribution

    题目传送门:E. Kuroni and the Score Distribution 题目大意:给n和m,输出n个数,这些数里必须要有m对a[i]+a[j]==a[k]  ( i < j < ...

  5. c语言实现--顺序表操作

    经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1;线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2;采用的实现方式:一段地址连 ...

  6. 洛谷 P1077 摆花 (背包DP)

    题意:有\(n\)种花,每种花有\(a_i\)盆,现在要摆\(m\)盆花,花的种类从\([1,n]\)有序排放,问有多少种方案数. 题解:这题可以借用01背包的思路,感觉更好想一点,我们首先枚举\(n ...

  7. Atcoder Educational DP Contest I - Coins (概率DP)

    题意:有\(n\)枚硬币,每枚硬币抛完后向上的概率为\(p[i]\),现在求抛完后向上的硬币个数大于向下的概率. 题解:我们用二维的\(dp[i][j]\)来表示状态,\(i\)表示当前抛的是第\(i ...

  8. rabbitmq学习二

    rabbitmq的六种工作模式: 这里简单介绍下六种工作模式的主要特点: 简单模式:一个生产者,一个消费者 work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一. 订阅模式:一个生产者发送 ...

  9. 头疼的Python 脚本报错

    Python 脚本报错 检查是否用了制表符.变量声明前面不能用制表符,只能用空格,版本为2.7.14

  10. CF1462-D. Add to Neighbour and Remove

    codeforces1462D 题意: 给出一个由n个数组成的数组,现在你可以对这个数组进行如下操作:将数组中的一个元素加到这个元素的两边中的一边,然后将这个元素删掉.若该元素在最左边,那么该元素不能 ...