安装
如果服务器上有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