Supervisor - 简介和配置


官网参考

简介

  • Supervisor运行在类unix操作系统,不支持windows;
  • 客户端 / 服务端 软件架构模式;
  • 帮助用户监控、管理一系列的进程的软件系统;
  • 将开启的进程作为自己的子进程,可以准确地地获取子进程的运行状态,且子进程异常退出后,也可以重启它们;
  • 可以代理普通用户去管理需要更高权限或者root权限的进程,只需使用root账户启动Supervisord即可;
  • 可以将进程进行分组,作为一个整体来启动、停止;当子进程退出时,操作系统立即通过信号通知Supervisor,非常高效;
  • 纯python实现,安装比较简单,支持python2.7、python3.4+;
  • 组件
    • supervisord,服务进程;

      • 负责启动子进程、响应客户端指令、重启退出的子进程、为子进程记录日志等;
      • 配置文件 /etc/supervisord.conf ,可能包含密码等敏感信息,严格控制访问权限;
    • supervisorctl,命令行客户端;

      • 连接supervisord服务进程,管理其子进程;
    • Web Server,web接口

      • inet_http_server 配置项激活
      • 访问http://localhost:9001/
    • XML-RPC Interface 文档

 

安装

  • 需网络连接
    • pip install supervisor
    • 或者下载源码,然后python setup.py install
    • 自行编写配置文件;
  • 无网络时,需提前下载相关的依赖包,安装依赖,然后安装supervisor;
  • 操作系统的包管理器安装
    • Ubuntu
      • 查看是否可以安装,apt-cache show supervisor;
      • 安装,sudo apt-get install supervisor; 安装后自动加入系统服务管理,开机自启动
      • 在/etc/supervisor/supervisord.conf 有配置文件;
    • CentOS
      • 查看是否可以安装, yum info supervisor;
      • 安装,yum install -y supervisor;

 

创建配置文件

安装supervisor之后,打印配置文件:

# 输出配置文件
$ echo_supervisord_conf > /etc/supervisord.conf   # 需要root权限,若没有权限,则放在当前目录下

# 运行supervisord 服务
$ supervisord -c /etc/supervisord.conf   # -c 指定配置文件

更多配置参考

 

supervisord 的参数

命令行选项:
-c FILE, --configuration=FILE ,指定配置文件(后台启动);

-n, --nodaemon,前台启动supervisord服务;

-s, --silent,不输出内容;

-h, --help 帮助信息

-u USER, --user=USER,用户名或者id

-m OCTAL, --umask=OCTAL ,supervisord启动后应该使用的umask;

-d PATH, --directory=PATH,supervisord进程进入后台前,切到该目录;

-l FILE, --logfile=FILE,日志文件

-y BYTES, --logfile_maxbytes=BYTES,supervisord活动日志最大大小,如1MB

-z NUM, --logfile_backups=NUM,备份副本数(每个副本都是logfile_maxbytes大小)

-e LEVEL, --loglevel=LEVEL,日志级别 trace, debug, info, warn, error, critical.

-j FILE, --pidfile=FILE,pid文件

-i STRING, --identifier=STRING,supervisord的字符串标识符;

-q PATH, --childlogdir=PATH,必须存在的目录,来存储子进程的日志;

-k, --nocleanup,防止supervisord在启动时清空子进程之前的日志;

-a NUM, --minfds=NUM,supervisord可以使用的最少的文件描述符数量;

-t, --strip_ansi,从所有的子进程日志中删除 ansi 转义序列;

-v, --version,查看版本;

–profile_options=LIST 逗号分割的列表选项;

–minprocs=NUM,supervisord可以使用的最少进程槽;

 

supervisorctl 使用

  • supervisorctl 进入交互模式,并查看所有指令;
    在这里插入图片描述

  • supervisorctl + 参数 不进入交互模式,直接执行指令;
    在这里插入图片描述

  • 命令行选项
    -c, 配置文件 (未指定时,先搜索当前目录,再搜索 /etc/supervisord.conf)
    -h, --help 帮助
    -i, --interactive,直行命令后开启交互模式;
    在这里插入图片描述
    -s, --serverurl URL, supervisord服务进程监听的地址(default “http://localhost:9001”).
    -u, --username,认证的用户名
    -p, --password,认证的密码
    -r, --history-file, 保留readline的历史记录;

  • 命令action

    • help xxx,查看帮助信息;

    • add <name> […] ,激活进程、进程组的任何更新;

    • remove <name> […] ,删除进程或者进程组

    • update,根据需要更新配置,并重启受影响的程序;

    • update all,同update;

    • update <gname> […] 更新指定的组,并重启受影响的程序;

    • clear <name> ,清空一个进程的日志文件;

    • clear <name> <name> ,清空多个进程的日志文件;

    • clear all ,清空所有进程的日志文件;

    • fg <process> ,前台模式连接一个进程,Ctrl+C 退出;

    • pid,Get the PID of supervisord.

    • pid <name>,根据名字获取一个子进程的pid;

    • pid all ,获取每个子进程的pid;

    • reload,重启supervisord服务;

    • reread,重新加载守护程序的配置文件;

    • restart <name>,重启一个子进程,不会重新加载配置;

    • restart <gname>,重启一个子进程组,不会重新加载配置;

    • restart <name> <name> 重启多个子进程或者组;

    • restart all,重启所有的子进程;

    • signal,信号

    • start <name>,开启一个子进程或者组;

    • start <name> <name> 开启多个子进程或者组;

    • start all,开启所有的子进程;

    • status,查看所有子进程的状态信息;

    • status <name>,查看一个子进程或者组的状态;

    • status <name> <name>,查看多个子进程状态信息;

    • stop <name> 停止一个子进程或者组;

    • stop <name> <name> 停止多个子进程或者组;

    • stop all,停止所有的子进程;

    • tail [-f] <name> [stdout|stderr] ,输出子进程日志的结尾的部分; Ctrl-C 退出;
      tail -100 <name> ,last 100 bytes of process stdout
      tail <name> stderr, last 1600 bytes of process stderr

 

信号

由操作系统发给Supervisord服务进程的信号,包含如下:

  • SIGTERM,关闭supervisord及其所有子进程;

  • SIGINT,类似SIGTERM、SIGQUIT;

  • SIGHUP,关闭所有进程,重新加载找到的第一个配置文件,并启动所有进程;

  • SIGUSR2,supervisord将关闭并重新打开主活动日志和所有子日志文件;
    为了安全起见,supervisor的所有配置文件、依赖文件等都不能被无权限的用户读写;PYTHONPATH也需要有健全的文件权限保护;

 

配置文件选项

  • 配置文件命名为supervisord.conf,被supervisord和supervisorctl 两个组件同时使用;

  • 若两个组件运行时,未通过-c指定配置文件,则搜索路径为:
    在这里插入图片描述
    $CWD 表示当前目录

  • 格式:配置文件是一个windows-ini 类型的文件,由数个部分组成,每个部分都是用[xxx]标识,内部使用key-value键值对;

  • [unix_http_server] 标识部分,配置监听unix域套接字的http server;

    • file = unix域套接字的路径,用来监听http请求或者XML rpc请求;supervisorctl就是通过XML rpc请求走该套接字,与supervisord进程通信;
    • chmod 修改unix域套接字的权限模式为当前值;
    • chown 修改unix域套接字用户、用户组为当前值;
    • username 需要认证的用户;
    • password 用户的密码;
[unix_http_server]
file = /var/run/supervisor.sock
chmod = 0777
chown= nobody:nogroup
username = user
password = 123

 

  • [inet_http_server]标识部分,监听tcp套接字的http server;
    • 配置文件中默认没有该配置部分,即默认不开启;
    • 若要开启,需注意安全性,一般绑定localhost 或者在一个安全隔离的网络环境;禁止暴露在公网中!
    • port = localhost:9001 ,supervisord监听http请求或者XML rpc 请求;必须参数;
    • username 需要认证的用户
    • password 用户的密码
[inet_http_server]
port = 127.0.0.1:9001
username = user
password = 123

 

  • [supervisord] 标识部分,服务进程的配置
    • logfile,活动日志文件,设置为/dev/stdout时,logfile_maxbytes必须为0;
    • loglevel, 日志级别,critical, error, warn, info, debug, trace;
    • logfile_maxbytes ,最大日志文件bytes大小,设置为0不限制,默认50MB;
    • logfile_backups,最大备份数;默认10
    • pidfile,进程id文件;
    • nodaemon,前台启动方式
    • silent, 前台启动时,不输出日子
    • minfds,可用的最少文件描述符;
    • minprocs,可用的最少进程描述符;
    • nocleanup,防止supervisord启动时清空子进程的日志文件;
    • childlogdir,子进程日志存储目录;
    • user,在任何处理前,切换到该用户;
    • directory,后台启动时进入该目录;
    • strip_ansi,从子进程日志文件中清除ansi转义序列;
    • environment,所有子进程的环境变量,key-val形式的键值对,如KEY=“val”,KEY2=“val2” 表示环境变量,放入所有子进程,但不影响supervisord进程;当val包含非字母、非数字时,必须引号;子进程也会继承开启supervisord的shell进程的环境变量;val中使用%%表示一个%;
    • identifier,supervisord进程的标识符,用于rpc通信;
[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /tmp/supervisord.pid
nodaemon = false
minfds = 1024
minprocs = 200
umask = 022
user = chrism
identifier = supervisor
directory = /tmp
nocleanup = true
childlogdir = /tmp
strip_ansi = false
environment = KEY1="value1",KEY2="value2"

 

  • [supervisorctl],客户端的配置;
    • serverurl,访问服务进程的url地址;
    • username,认证的用户
    • password,认证的密码;
    • prompt,命令提示符;
    • history_file,记录历史命令的文件;
[supervisorctl]
serverurl = unix:///tmp/supervisor.sock
username = chris
password = 123
prompt = mysupervisor

 

  • [program:xxx],管理的应用程序(进程);
    • xxx表示进程的名称
    • command,启动该进程运行的命令;绝对路径或者相对路径(搜索supervisord进程的$PATH环境变量,找到可执行文件)
      • 如/bin/xxx arg1 arg2 接收命令行参数;
      • /path/to/program -p “foo bar”;双引对参数分组;
      • 可以包含表达式,如/path/to/program --port=80%(process_num)02d 可以扩展为 /path/to/program --port=8000
      • 该应用程序进程应为前台启动,然后supervisord将他们改为后台方式;
      • 若 command=bash -c ‘foo ; bar’ ,这种类似配置文件的方式会被截断,得到command=bash -c 'foo
    • process_name,当前进程名称,默认为%(program_name)s,numprocs=1时,不用管;
    • numprocs,当前应用的进程数(默认1),numprocs > 1时,process_name必须包含%(process_num)s
    • numprocs_start ,多个进程时的起始索引值,默认0;
    • priority,应用程序的优先级,默认999;
      • 低优先级先启动、最后关闭;
      • 高优先级最后启动、先关闭;
    • autostart,默认true,supervisord启动时,自动启动该应用程序;
    • startsecs,应用程序从启动(starting)到==稳定运行(stay running)==所需时间,默认1;
    • startretries,重启次数,默认3
    • autorestart,应用程序从运行态退出后,是否应该重启;
      • false,不重启;
      • unexpected,非预期退出(退出的状态码不在exitcodes中)时,自动重启;默认
      • true, 一旦退出,就自动重启;
    • exitcodes 退出的状态码列表,默认0;
    • stopsignal ,停止信号,当用户通过supervisorctl 发送stop指令时,stopsignal被用来杀掉对应的进程;可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2,默认为TERM;
    • stopwaitsecs,停止一个应用程序等待的时间,若超过该时间,则supervisord会发送SIGKILL强制杀掉该进程;默认为10
    • stopasgroup,默认false,若为true,则将该应用进程及其子进程作为一个整体来停止,同时将killasgroup认为true;防止仅关闭应用的父进程,导致子进程成为孤儿进程;
    • killasgroup,默认false,若为true, 则关闭父进程及其子进程;
    • user,使用当前用户作为运行应用程序的账户;只有supervisord以root权限运行时,才可以切换;
    • redirect_stderr,重定向标准错误到标准输出,默认false,相等于/the/program 2>&1
    • stdout_logfile,标准输出的日志文件;
    • stdout_logfile_maxbytes, 默认50MB
    • stdout_logfile_backups,默认10
    • stdout_capture_maxbytes,在capture模式下,可以写入的捕获FIFO的最大日志,默认0;
    • stdout_events_enabled,若为true,则(非捕获模式下)写入到标准输出时,触发 PROCESS_LOG_STDOUT事件;
    • stdout_syslog,标准输出定向到syslog,默认false;
    • stderr_logfile,标准错误的日志文件,若redirect_stderr为true,则该选项可不指定;若指定的标准错误日志文件找不到(not seekable like /dev/stderr),则stderr_logfile_maxbytes = 0,即log rotation必须禁用;
    • stderr_events_enabled,默认false
    • stderr_syslog, 定向到syslog;
    • environment,应用程序进程的环境变量,如KEY=“xxx”,KEY2=‘xxx’;
    • directory,在启动应用程序进程前,supervisord临时进入该目录;
    • umask,一个八进制数,表示进程的umask码;默认不指定,继承supervisor的
    • serverurl,supervisord服务的地址,unix域的socket 或者tcp socket; 默认AUTO
[program:cat]
command=/bin/cat
process_name=%(program_name)s
numprocs=1
directory=/tmp
umask=022
priority=999
autostart=true
autorestart=unexpected
startsecs=10
startretries=3
exitcodes=0
stopsignal=TERM
stopwaitsecs=10
stopasgroup=false
killasgroup=false
user=chrism
redirect_stderr=false
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
stderr_events_enabled=false
environment=A="1",B="2"
serverurl=AUTO

 

  • [group:xxx], 进程组
    • programs表示配置的应用程序
    • priority,组的优先级
[group:foo]
programs=bar,baz
priority=999

 

  • [include] 包含其他配置文件
    • files=/xxx/path/xx.conf ,文件名可以使用通配符表示;
[include]
files = /an/absolute/f1.conf /an/absolute/*.conf foo.conf config??.conf

 

  • [fcgi-program:x] 快速公共网关接口,应用程序,在supervisor3.4版本前,该应用不能被[group:xx] 块引用;
    • socket, fast-cgi socket连接;如TCP连接:tcp://localhost:9002.;UNIX domain sockets,unix:///absolute/path/to/file.sock
    • socket_backlog,最大监听数,如listen(100);
    • socket_owner,对于UNIX domain sockets设置用户、组, 如user:group
    • socket_mode,对于UNIX domain sockets ,设置权限,默认0700;
    • 其他选项同program部分
[fcgi-program:fcgiprogramname]
command=/usr/bin/example.fcgi
socket=unix:///var/run/supervisor/%(program_name)s.sock
socket_owner=chrism
socket_mode=0700
process_name=%(program_name)s_%(process_num)02d
numprocs=5
directory=/tmp
umask=022
priority=999
autostart=true
autorestart=unexpected
startsecs=1
startretries=3
exitcodes=0
stopsignal=QUIT
stopasgroup=true
killasgroup=true
stopwaitsecs=10
user=chrism
redirect_stderr=true
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_events_enabled=false
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_events_enabled=false
environment=A="1",B="2"
serverurl=AUTO

 

  • [eventlistener:x] 事件监听池
    • buffer_size,监听池事件队列的大小;满时删除最早的时间;
    • events,逗号分割的事件列表;事件类型
    • result_handler,事件处理器
    • 其他选项同==[program:xxx]==
[eventlistener:theEventListenerName]
command=/bin/eventlistener
process_name=%(program_name)s_%(process_num)02d
numprocs=5
events=PROCESS_STATE
buffer_size=10
directory=/tmp
umask=022
priority=-1
autostart=true
autorestart=unexpected
startsecs=1
startretries=3
exitcodes=0
stopsignal=QUIT
stopwaitsecs=10
stopasgroup=false
killasgroup=false
user=chrism
redirect_stderr=false
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_events_enabled=false
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_events_enabled=false
environment=A="1",B="2"
serverurl=AUTO

 

  • [rpcinterface:x],用于扩展功能
    • 必须保留[rpcinterface:supervisor]块;
    • 自定义another接口,函数需接收一个supervisord位置参数,收集关键字参数(配置项以关键字参数传入),内部返回AnotherRPCInterface实例;
[rpcinterface:another]
supervisor.rpcinterface_factory = my_package:another_rpc_interface
retries = 1

 
下一篇: supervisor 的子进程

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Supervisor是一个用于管理进程的工具,可以通过配置文件来指定要监控和管理的进程。在配置Supervisor之前,您需要创建一个supervisord.conf文件,并将其放置在/etc/supervisor目录下。您可以使用以下命令来创建和编辑配置文件: ``` sudo mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf ``` 在配置文件中,您可以使用supervisorctl命令行工具来查看和管理进程的状态。一些常用的supervisorctl命令包括: - supervisorctl:查看所有进程的状态 - supervisorctl stop <name>:停止特定的进程 - supervisorctl start <name>:启动特定的进程 - supervisorctl restart <name>:重启特定的进程 - supervisorctl update:加载新的配置(当配置文件修改后) - supervisorctl reload:重新启动配置中的所有程序 您还可以通过运行以下命令来启动Supervisor: ``` supervisord -c /home/supervisord.conf ``` 以上是关于Supervisor配置和常用命令的简要说明。希望能对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Supervisor 配置详解](https://blog.csdn.net/chenyulancn/article/details/123965900)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [详解 Linux 环境下进程管理工具 Supervisor](https://blog.csdn.net/jake_tian/article/details/101444283)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值