Supervisor安装与配置

目录

一、Supervisor介绍

二、supervisord 和 supervisorctl

三、安装Supervisor

3.1、源码安装

3.2、验证安装是否成功

四、配置Supervisor

4.1、创建配置

4.2、修改配置文件

4.3、启动Supervisor

4.4、添加启动脚本

五、配置文件详解

六、监控配置文件说明

七、supervisorctl命令说明


一、Supervisor介绍

        Supervisor翻译过来是监管人,在Linux中Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它。可以运行在各种类Linux/unix的机器上,supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

二、supervisord 和 supervisorctl

        supervisord:运行supervisor时会启动一个进程,叫supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。

        supervisorctl:是命令行管理工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理。

        supervisor:是所有进程的父进程,管理着启动的子进展,supervisor以子进程的PID来管理子进程,当子进程异常退出时supervisor可以收到相应的信号量。

三、安装Supervisor

        安装Supervisor的方式分为两种:

        1、yum安装

        2、源码安装

3.1、源码安装

        本次采用的是源码安装,Supervisor下载地址:supervisor · PyPI,把安装包下载下来,并上传到服务器对应的目录进行解压后,使用python setup.py install命令进行安装,如下所示:

[root@Centos7-App supervisor]# cd supervisor-4.2.5/
[root@Centos7-App supervisor-4.2.5]# ls
CHANGES.rst  COPYRIGHT.txt  docs  LICENSES.txt  MANIFEST.in  PKG-INFO  README.rst  setup.cfg  setup.py  supervisor  supervisor.egg-info  tox.ini
[root@Centos7-App supervisor-4.2.5]# python setup.py install

        注: 如果在源码安装过程中,可能出现以下报错 ,是因为没有安装setuptools模块造成,需要安装该模块后,再安装Supervisor。

Traceback (most recent call last):
      File "setup.py", line 32, in 
         from setuptools import setup, find_packages
ImportError: No module named setuptools

        这里就不在介始如何安装相应报错的模块了,大家可以用源码安装或是用pip命令进行安装。

3.2、验证安装是否成功

        执行supervisorctl  --help即可,如下所示:

[root@Centos7-App bin]# supervisorctl --help
supervisorctl -- control applications run by supervisord from the cmd line.

Usage: /usr/bin/supervisorctl [options] [action [arguments]]

Options:
-c/--configuration FILENAME -- configuration file path (searches if not given)
-h/--help -- print usage message and exit
-i/--interactive -- start an interactive shell after executing commands
-s/--serverurl URL -- URL on which supervisord server is listening
     (default "http://localhost:9001").
-u/--username USERNAME -- username to use for authentication with server
-p/--password PASSWORD -- password to use for authentication with server
-r/--history-file -- keep a readline history (if readline is available)

action [arguments] -- see below

Actions are commands like "tail" or "stop".  If -i is specified or no action is
specified on the command line, a "shell" interpreting actions typed
interactively is started.  Use the action "help" to find out about available
actions.

四、配置Supervisor

4.1、创建配置

        首选要创建Supervisor管理的配置文件路径。

[root@Centos7-App /]# mkdir -pv /application/supervisor/conf.d
[root@Centos7-App /]# mkdir -pv /application/supervisor/etc

        生成Supervisor配置文件。

[root@Centos7-App /]# echo_supervisord_conf >/application/supervisor/etc/supervisor.conf

        注:可以根据自己服务路径的实际要求进行创建

4.2、修改配置文件

[root@Centos7-App /]# cd /application/supervisor/etc
[root@Centos7-App /]# vi supervisor.conf
.......  #配置文件上面的配置可以按照自已的需求进行修改即可
找到include一小节,并放开注释,改成自己配置的配置文件管理路径
;[include]
;files = relative/directory/*.ini
改成
[include]
files = /application/supervisor/conf.d/*.ini

4.3、启动Supervisor

[root@Centos7-App etc]# supervisord -c /application/supervisor/etc/supervisor.conf 
[root@Centos7-App etc]# ps -ef|grep supervisor
root      3385     1  0 13:59 ?        00:00:00 /usr/bin/python /usr/bin/supervisord -c /application/supervisor/etc/supervisor.conf

        到此为止Supervisor已完成安装。

4.4、添加启动脚本

[root@Centos7-App etc]# vi /usr/lib/systemd/system/supervisord.service
[Unit] 
Description=Supervisor daemon 

[Service] 
Type=forking 
ExecStart=/usr/bin/supervisord -c /application/supervisor/etc/supervisor.conf 
ExecStop=/usr/bin/supervisorctl -uadmin -p123456 -c /application/supervisor/etc/supervisor.conf shutdown 
ExecReload=/usr/bin/supervisorctl -uadmin -p123456 -c /application/supervisor/etc/supervisor.con reload 
KillMode=process 
Restart=on-failure 
RestartSec=42s 

[Install] 
WantedBy=multi-user.target

[root@Centos7-App etc]# systemctl daemon-reload
[root@Centos7-App etc]# systemctl enable supervisord.service
Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.

        注:加用户名和密码是因为在supervisor.conf的配置文件中的“inet_http_server”小节,启用了用户名和密码配置。

五、配置文件详解

[root@Centos7-App etc]# cat /application/supervisor/etc/supervisord.conf 
supervisord.conf使用了Windows INI风格,每段以[xx]开头,段内配置均为键/值对。
[unix_http_server]
file=/var/run/supervisor/supervisor.sock 	;socket 路径
chmod=0700 									; supervisor.sock 文件权限,默认为0700
;chown=nobody:nogroup 			; supervisor.sock文件属主和属组,默认由root:root
username=admin 					;使用supervisorctl登录到supervisord cmd会话窗口的用户,默认不需
要用户名
password=1235 					; 使用supervisorctl登录到supervisord cmd窗口的密码(支持明文和
SHA),supervisorctl -uadmin -p1235
[inet_http_server] 				; 该段配置用于提供一个HTTP的WEB控制台,用于WEB界面管理服
务进程,默认不开启
port=0.0.0.0:9001 				; 监控的IP:端口,使用*:9001表示监听所有接口上的9001端口
username=admin 					;用于登录到WEB控制台的用户名,默认没有设置用户名
password=1234 					; 用于登录到WEB控制台的密码,默认没有设置密码
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; 日志存放路径
logfile_maxbytes=50MB 			;日志达50MB后滚动,默认值50MB
logfile_backups=10 				;保留10个supervisord.log日志,默认值10
loglevel=info 					;日志级别,默认配置为info; 可配置为debug、warn、trace
pidfile=/var/run/supervisord.pid ; 进程文件路径
nodaemon=false 					; supervisord进程是否在前台启动;默认为false,表示后台启动
minfds=1024 					; 启动supervisord前可用的最小文件描述符数为1024,
即/etc/security/limits.conf中nofile设置要大于1024,否则用普通用户将无法启动
supervisord
minprocs=200 					; 启动supervisord前,最小可用procs不能小于200,
即/etc/security/limits.conf中nproc设置要大于200,否则用普通用户将无法启动
supervisord
umask=022 						;supervisord进程文件的umask,默认为022
;user=chrism 					; supervisord进程用户,默认为root
;identifier=supervisor 			;管理器进程的标识符,给RPC接口使用,默认为supervisor
;directory=/tmp 				; 启动时不用cd到当前目录
;nocleanup=true 				; 阻止supervisord在启动时清除任何现有的日志文件,默认为
false
;childlogdir=/tmp 				; 用于自动子日志文件的目录,默认值取的是python的
tempfile.get_tempdir()方法
;environment=KEY=value 			; 用于定义环境变量,以键值对的方式
;strip_ansi=false 				; (strip ansi escape codes in logs; def. false)
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; 使用unix套接字方式
;username=admin 				; 如果设置,需和http_username一样,但实际测试验证设与不设置均
不影响supervisorctl
;password=1234					; 如果设置,需和http_password一样,但实际测试验证设与不设置均
不影响supervisorctl
prompt=mysupervisor 			;进入supervisord会话窗口后的命令提示符
history_file=~/.sc_history 		; 使用supervisorctl进入supervisord会话窗口后,操作命令均保
存在该文件内
;[program:cat] 					;冒号后的cat为服务名称,也可以是prometheus、node_exporter等
;command=/bin/cat 				;服务启动的命令
;process_name=%(program_name)s 	;一个使用Python字符串的表达式,用来描述进程名
称(字符串),默认设置
;numprocs=1 					;默认为1,如果>1,则process_name表达式必须包含%(process_num)s,
或包含process_num的任何其他有效Python字符串表达式
;directory=/tmp 				;应用目录,可不设置
;umask=022 						;掩码,按默认设置
;priority=999 					;优先级越高,表示最先关闭,最晚启动,默认为999
;autostart=true 				;是否自启动
;autorestart=unexpected 		;当进程处于运行状态时,如果该进程退出,则是否应自动重新启动该进程。如果设置为false,则不会自动重新启动进程。如果设置为unexpected,当程序退出时,退出代码不是与此进程配置相关联的退出代码之一(请参阅退出代码),则将重新启动进程。如果设置为true,则进程在退出时将无条件重新启动,而不考虑其退出代码
;startsecs=10 					;服务启动后需要保持运行多少秒才认为启动成功,如10秒仍处理运行状态则表示启动成功。
;startretries=3 				;尝试启动次数
;exitcodes=0 					;退出代码,默认为0,该值设置会影响到autorestart
;stopsignal=TERM 				;停止信号,可以是TERM, HUP, INT, QUIT, KILL, USR1, or USR2
;stopwaitsecs=10 				;停止时等待多少秒
;stopasgroup=false 				;向进程组发送停止信号,这止进程
;killasgroup=false 				;向进程组发送SIGKILL终止进程
;user=chrism 					;启动用户
;redirect_stderr=false 			;标准错误输出是否重定向,若设置为true,则表示将错误输出重定向到标准出日志文件中
;stdout_logfile=/a/path 		;标准输出日志文件路径
;stdout_logfile_maxbytes=1MB 	;单个日志文件大小,超出将滚动
;stdout_logfile_backups=10 		;保留日志个数
;stderr_logfile=/a/path 		;标准错误输出日志文件位置,redirect_stderr=false才有效
;stderr_logfile_maxbytes=1MB 	;标准错误输出单个日志文件大小,超出将滚动,redirect_stderr=false才有效
;stderr_logfile_backups=10	 	;保留标准错误输出日志文件个数,超出删除,edirect_stderr=false才有效

[include] 						;将各应用配置分别存放于supervisord.d下,便于管理。
files = supervisord.d/*.ini

六、监控配置文件说明

[root@Centos7-App etc]# cd /application/supervisor/conf.d
[root@Centos7-App etc]# vim test.ini

[program:test_jar]  ;项目名
command=java -jar /application/test_jar/test_jar.jar  ; 被监控的进程路径
priority=1                    ; 数字越高,优先级越高
numprocs=1                    ; 启动几个进程
autostart=true                ; 随着supervisord的启动而启动
autorestart=true              ; 自动重启
startretries=10               ; 启动失败时的最多重试次数
exitcodes=0                   ; 正常退出代码
stopsignal=KILL               ; 用来杀死进程的信号
stopwaitsecs=10               ; 发送SIGKILL前的等待时间
redirect_stderr=true          ; 重定向stderr到stdout

        配置完成之后重启一下所配置的项目即可,如下命令:

[root@Centos7-App etc]# supervisorctl -uadmin -p123456 -c /application/supervisor/etc/supervisor.conf reload test_jar

        注:如果在supervisor.conf配置文件中的“inet_http_server”小节,启动了用户名和密码,此处重新所配置的项目时,命令一定要加上用户名和密码去重启,否则会报出类似于“ERROR: http://localhost:9001”的错误信息。

七、supervisorctl命令说明

supervisorctl stop program_name
停止某一个进程(program_name),program_name 为 [program:test] 里配置的值,这个示例就是 test。
supervisorctl start program_name
启动某个进程。
supervisorctl restart program_name
重启某个进程。
supervisorctl status
查看进程状态。
supervisorctl stop groupworker 
重启所有属于名为 groupworker 这个分组的进程(start,restart 同理)。
supervisorctl stop all
停止全部进程,注:start、restart、stop 都不会载入最新的配置文件。
supervisorctl reload
载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update
根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

你可能感兴趣的:(随手杂记,linux,运维)