安装
如果服务器上有pip
,则直接运行命令pip install supervisor
安装,如果没有,则需要下载安装文件,之后运行命令python setup.py install
安装。
以上都需要能连接到互联网。
配置
安装完成之后,执行命令echo_supervisord_conf > /etc/supervisord.conf
即可生成默认配置文件,如果没有root
权限,也可以把配置文件保存在用户自己的目录下,运行supervisord
时使用-c
参数指定配置文件路径即可。
supervisor
启动时如果没有使用-c
参数,则会自动在当前目录下查找配置文件。
示例如下:
supervisord -c supervisord.conf
运行
这里会使用到一个名称为BINDIR
的目录,和系统中python的安装目录相关。比如,安装python
时通过./configure --prefix=/usr/local/py; make; make install
命令,则BINDIR
就是/usr/local/py/bin
。你也可通过查看setup.py install
命令的输出来确认在你的系统中这个目录具体是什么。
运行$BINDIR/supervisord
就可以启动了。它会自动进入后台进程,关闭当前终端也不会退出。默认会在当前目录下生成一个日志文件($CWD/supervisor.log
)。
在启动时自动运行
如果你是通过安装包来安装的,supervisord
就已安装到系统服务里了。
这里有很多用户提供的适用于多种操作系统的脚本。
这里还有一些有用的问答。
配置文件
配置文件的详细说明,可以看官网,这里只给出基本说明。
如果在启动supervisord
时没有通过-c
参数提供配置文件的路径,supervisord
会通过以下顺序去查找名为supervisord.conf
的配置文件。
1. $CWD/supervisord.conf
2. $CWD/etc/supervisord.conf
3. /etc/supervisord.conf
4. /etc/supervisor/supervisord.conf
(since Supervisor 3.3.0)
5. ../etc/supervisord.conf
(Relative to the executable)
6. ../supervisord.conf
(Relative to the executable)
文件格式
supervisord.conf
使用Windows的ini配置文件格式。
环境变量
可以在配置文件中使用环境变量,使用python
的字符串表达式语法%(ENV_X)s
,示例如下:
[program:example]
command=/usr/bin/example --loglevel=%(ENV_LOGLEVEL)s
在上面的例子中%(ENV_LOGLEVEL)s
会被替换成环境变量LOGLEVEL
的值。
注意:这个特性只在3.2版本及更高版本中支持,之前的版本只能部分支持,需要查看对应版本的文档。
配置块
[supervisord]
[supervisord]
配置块是全局配置。
配置项 | 必须 | 说明 | 默认值 |
---|---|---|---|
logfile | 否 | 日志文件路径 | $CWD/supervisord.log |
logfile_maxbytes | 否 | 日志文件最大大小(后缀可以是KB 、MB 、GB ) ,设置成0表示不限制 |
50MB |
logfile_backups | 否 | 日志文件备份数量,设置为0表示不备份 | 10 |
loglevel | 否 | 日志级别,可设置为critical , error , warn , info , debug , trace , 或 blather 之一,设置为debug 级别时,会记录下子进程的`stderr/stdout输出,这对调试有问题的进程很有用 |
info |
user | 否 | 以user 用户的身份执行操作,切换用户身份失败时不会运行程序,必须是以root 用户身份启动supervisord
|
无 |
environment | 否 | 设置supervisord 及其子进程运行时的环境变量,格式KEY="val",KEY2="val2"
|
无 |
示例:
[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"
[program:x]配置块
配置文件中必须包含至少一个program
配置块,supervisord
通过这个配置块知道要启动和管理的进程信息。冒号后面的x
表示要启动的程序的名称,比如[program:foo]
表示一个名称为foo
的程序。这个名称会在supervisorctl
或网页管理界面中显示,名称当中不能包含冒号和括号等特殊字符。
配置项 | 必须 | 说明 | 默认值 |
---|---|---|---|
command | 是 | 要执行的命令,示例:/path/to/program/name -p "foo bar"
|
无 |
startsecs | 否 | 程序启动后需要保持在运行状态的时长(单位:秒)。注意:即使程序运行正常退出了,如果不到设置的时长,也会被认为是启动失败 。 | 1 |
startretries | 否 | 尝试启动次数,超过设置的次数后,程序会被标记为FATAL 状态 |
3 |
autorestart | 否 | 当处于RUNNING 状态的程序退出后,supervisord 是否自动重启之。可选值:false , unexpected 或 true 。false 表示不重启,unexpected 表示当程序非正常退出时重启,true 表示总是重启。 |
unexpected |
exitcodes | 否 | 表示程序正常退出的退出码 | 0 |
user | 否 | 以user 用户的身份执行操作,切换用户身份失败时不会运行程序,必须是以root 用户身份启动supervisord
|
无 |
示例:
[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
[include]配置块
[include]配置块表示要包含的外部配置文件,
配置项 | 必须 | 说明 | 默认值 |
---|---|---|---|
files | 是 | 空格分隔的路径,可以包含* ? 通配符,可以是绝对路径或相对路径 |
无 |
示例:
[include]
files = /an/absolute/filename.conf /an/absolute/*.conf foo.conf config??.conf