- 安装 Supervisor
Ubuntu 16.04 可以直接安装 Supervisor, 非常方面
sudo apt-get install supervisor
leo@uLinux:~$ sudo apt-get install supervisor
- 配置说明
Supervisor 配置文件可以存放的地方比较多. 通常使用系统默认的地方存放就好. 不要搞那么复杂. 系统默认存放配置文件的目录为: /etc/supervisor/conf.d/
, 可以为每个脚本配置一个配置文件. 方便管理.
Supervisor 本身也有一个标准的配置文件. 这个有必要了解一下. 具体路径为: /etc/supervisor/supervisord.conf
; supervisor config file
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.
[include]
files = /etc/supervisor/conf.d/*.conf
supervisord.conf
文件配置格式为段落式, 以 []
声明一个段落. 核心段落 包含了 [unix_http_server]
, [supervisord]
, [rpcinterface:supervisor]
, [supervisorctl]
, [include]
等几个, 需要管理的程序以 [program:program_name]
段落来声明注册.
-
[unix_http_server]
unix_http_server
为supervisord
的unix socket服务配置, 配置此部分可为后面的管理工具supervisorctl
方便管理Supervisord
.
配置项 | 必选 | 默认值 | 说明 |
---|---|---|---|
file |
必选 | file=/var/run/supervisor.sock |
socket 文件保存位置 |
chmod |
可选 | chmod=0700 |
supervisord 进程启动的时候, 对上面 file 的文件权限进行配置 |
chown |
可选 | 无 |
supervisord 进程启动的时候, 对上面 file 配置的文件用户和用户组进行修改, 默认为谁启动supervisord 进程的用户信息, 也可以特别配置为: chown=nobody:nogroup
|
username |
可选 | 无 | 此项为后面的 [supervisorctl] 服务, 使用 supervisorctl 命令操作管理进程的时候, 需要进行身份验证用到的账号. |
password |
可选 | 无 | 此项和 username 功能一样, 密码可以使用明文或者SHA加密的密码. |
严格来说,
file
也可以不用配置, 那么supervisorctl
就不能用了.
-
[inet_http_server]
inet_http_server
可以为Supervisor
配置一个简单 web 管理界面. 通常supervisorctl
来管理, 若不是特别需要, 不会启用此配置段.
配置项 | 必选 | 默认值 | 说明 |
---|---|---|---|
port |
必选 | 无 | web 管理平台地址: 127.0.0.1:9001
|
username |
可选 | 无 | web 管理平台登录账户 |
password |
可选 | 无 | web 管理平台登录密码 |
[inet_http_server]
port = 127.0.0.1:9001
username = user
password = 123
username
和password
不配置可以直接通过网页访问web管理平台
-
[supervisord]
supervisord
部分为 Supervisor 核心配置. 配置项比较多.
配置项 | 必选 | 默认值 | 说明 |
---|---|---|---|
logfile |
可选 | $CWD/supervisord.log |
日志存放路径. 默认保存在当前目录. |
logfile_maxbytes |
可选 | 50MB |
日志文件最大值, 设置为0 不切割日志. |
logfile_backups |
可选 | 10 |
日志文件最多保留个数. 设置 0 不保存. |
loglevel |
可选 | info |
日志等级, 通用标准等级. |
pidfile |
可选 | $CWD/supervisord.pid |
PID文件路径 |
umask |
可选 | 022 |
进程创建文件的掩码 |
nodaemon |
可选 | false |
是否在前台运行. |
minfds |
可选 | 1024 |
设置启动时需要的系统最少可用文件描述符数量, cat /proc/sys/fs/file-max 查看当前系统的配置. |
minprocs |
可选 | 200 |
设置启动时需要的系统最小可用的进程描述符数量, ulimit -u 查看当前的配置. |
nocleanup |
可选 | false |
启动时是否清理之前的子进程的日志. 设置true 可用保留之前的日志, 方便调试. |
childlogdir |
可选 | tempfile.get_tempdir() |
|
user |
可选 | 无 | |
directory |
可选 | 无 |
supervisord 启动后切换到该目录. |
strip_ansi |
可选 | false |
设置为 true 清理日志中的 ASNI 换行\n , \t 等字符. |
environment |
可选 | 无 | 设置环境变量 |
identifier |
可选 | supervisor |
设置 supervisord 的标识符, RPC可能会用到. |
-
[rpcinterface:supervisor]
使用supervisord或者web server 这个选项要开启.
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
-
[supervisorctl]
supervisorctl
管理工具配置.
配置项 | 必选 | 默认值 | 说明 |
---|---|---|---|
serverurl |
必选 | http://localhost:9001 |
本地使用 UNIX socket 连接, 配置为 unix_http_server 段的 file 值, 远程使用TCP连接使用 inet_http_server 段的port 值 |
username |
可选 | 无 | 账户 |
password |
可选 | 无 | 密码 |
prompt |
可选 | supervisor |
身份验证弹出框标题 |
history_file |
可选 | 无 | 保留历史命令文件, 类似: .bash_history
|
-
[include]
include
配置可以到指定目录把相关的配置载入到主配置文件.
配置项 | 必选 | 默认值 | 说明 |
---|---|---|---|
files |
必选 | 无 |
要载入的文件, 可以使用通配符 * 载入多个配置文件. |
关键配置段 [program:x]
-
[program:x]
通常使用supervisord
管理的脚本都单独写成配置文件保存在默认的/etc/supervisor/conf.d/
目录下. 每个文件就是一个[program:program_name]
配置. 方便管理.
配置项 | 必选 | 默认值 | 说明 |
---|---|---|---|
command |
必选 | 无 |
需要执行的脚本, 比如: php /root/test.php
|
process_name |
可选 | %(program_name)s |
进程名, 就是 [program:program_name] 的 program_name
|
numprocs |
可选 | 1 |
建议设置为1 , 可以设置大于1 , 做成多进程. 简单的脚本如果要运行多份, 复制几个配置文件, 来执行, 方便管理. |
numprocs_start |
可选 | 0 |
numprocs=1 的时候, 无视此配置. |
priority |
可选 | 999 |
进程启动关闭优先级,优先级低 的,最先 启动,关闭的时候最后 关闭 |
autostart |
可选 | true |
是否设置随supervisord 自动启动 |
startsecs |
可选 | 1 |
子进程启动多少秒之后,此时状态如果是running, 判定为启动成功. |
startretries |
可选 | 3 |
子进程启动失败重试次数. |
autorestart |
可选 | unexpected |
子进程挂掉后自动重启的情况, 可配置: false , unexpected , true . false :无论什么情况下, 都不会被重新启动. unexpected : 当进程的退出码不在exitcodes 里面定义的退出码的时候, 才会被自动重启. true : 只要子进程挂掉, 无条件的重启 |
exitcodes |
可选 |
0 , 2
|
正常退出码 |
stopsignal |
可选 | TERM |
进程停止信号, 可选TERM , HUP , INT , QUIT , KILL , USR1 , USR2 等. 当用设定的信号去干掉进程, 退出码会被认为是expected
|
stopwaitsecs |
可选 | 10 |
向子进程发送stopsignal 信号后,到系统返回信息给supervisord , 所等待的最大时间. 超过这个时间, supervisord 会向该子进程发送一个强制kill的信号. |
stopasgroup |
可选 | false |
多子进程使用 |
killasgroup |
可选 | false |
多子进程使用 |
user |
可选 | 无 |
|
redirect_stderr |
可选 | false |
设置true ,stderr 的日志会被写入stdout日志文件中. |
stdout_logfile |
可选 | AUTO |
日志路径 |
stdout_logfile_maxbytes |
可选 | 50MB |
|
stdout_logfile_backups |
可选 | 10 |
|
stdout_capture_maxbytes |
可选 | 0 |
|
stdout_events_enabled |
可选 | 0 |
|
stderr_logfile |
可选 | AUTO |
|
stderr_logfile_maxbytes |
可选 | 50MB |
|
stderr_logfile_backups |
可选 | 10 |
|
stderr_capture_maxbytes |
可选 | 0 |
|
stderr_events_enabled |
可选 | 0 |
|
environment |
可选 | 无 |
|
directory |
可选 | 无 |
|
umask |
可选 | 无 |
|
serverurl |
可选 | AUTO |
对应一般监控脚本来说. 配置太多, 太复杂. 参考下面的一份大部分脚本使用的简要配置.
[program:test]
command=php /tmp/test.php
autostart=true
autorestart = true
stdout_logfile=/tmp/test_stdout.log
stderr_logfile=/tmp/test_stderr.log
保存上面的内容到 /etc/supervisor/conf.d/test.conf
文件中. 在/tmp
目录下创建 test.php
脚本
<?php
// file: /tmp/test.php
while(true) {
echo date('r') . PHP_EOL;
sleep(1);
}
使用 supervisorctl
管理脚本.
sudo supervisorctl reload #重载配置文件.
sudo supervisorctl status #查看当前的进程状态.
sudo supervisorctl stop test #停止 test 进程.
sudo supervisorctl start test #启动 test 进程.
网友评论