supervisor 安装配置及使用

为了更加便捷方便的管理RabbitMQ进程,了解Supervisor的安装及使用,是必不可少的有效方法。

什么是supervisor

supervisor是用python写的一个进程管理工具,用来启动,重启,关闭进程。

安装Supervisor

#我的安装环境是windows下WSL, ubuntu系统。
apt install supervisor

安装完成,简单了解一下supervisord 和 supervisorctl

supervisord 是 supervisor的守护进程服务(服务端),主要用于接收进程的管理命令。

#当运行supervisord的时候,它将在默认位置(包括当前工作目录)中搜索其配置文件,如果有安全意识,可以通过“-c” 来指定配置文件的绝对路径。
supervisord -c /etc/supervisord.conf (在此之前需要配置supervisord.conf)
supervisord 常用命令行选项:
短命令 长命令 说明
-c FILE --configuration=FILE 配置文件的路径
-h --help 命令帮助
-l FILE --logfile=FILE 用作监督活动日志的文件名路径
-y BYTES --logfile_maxbytes=BYTES 轮换之前,受监管日志文件的最大大小。该值后缀乘以,例如“ 1”是一个字节,“ 1MB”是1兆字节,“ 1GB”是1千兆字节。
-z NUM --logfile_backups=NUM 要保留的受监督日志的备份副本数。每个日志文件的大小为logfile_maxbytes
-e LEVEL --loglevel=LEVEL 记录日志的级别,分别是trace, debug, info, warn, error, and critical
更多命令查看官方文档

supervisorctl 是 supervisor的客户端,用于和守护进程通信,发送管理进程的指令。

要启动supervisorctl,请运行$ BINDIR / supervisorctl。将提供一个shell,使您可以控制supervisor当前管理的过程。在提示符下键入“ help”以获取有关支持的命令的信息。
supervisorctl 常用命令选项:
短命令 长命令 说明
-c FILE --configuration=FILE 配置文件的路径
-h --help 打印使用情况消息并退出
-i --interactive 执行命令后启动交互式Shell
-s --serverurl URL 管服务器正在侦听的URL(默认为“ http:// localhost:9001 ”)。
-u --username 用于服务器身份验证的用户名
-p --password 用于服务器验证的密码
-r --history-file 保留阅读行历史记录
更多命令查看官方文档
运行supervisorctl:
supervisorctl -c /etc/supervisord.conf
supervisorctl 操作命令:
命令 说明 样例
help 打印可用动作列表 help add/start/restart ...
add 激活配置中进程/组的任何更新 add
remove 从活动配置中删除进程/组 remove
update 重新加载配置并根据需要添加/删除,并将重新启动受影响的程序 update
update all 重新加载配置并根据需要添加/删除,并将重新启动受影响的程序 update all
update 更新特定的组 update
clear 清除进程的日志文件 clear test
更多命令查看官方文档

看一下Supervisord.conf文件内容

生成supervisord.conf文件的前提:

Supervisor安装完成后,运行 echo_supervisord_conf。这会将“样本” Supervisor配置文件打印到终端的标准输出。

一旦看到文件回显到终端,请重新调用命令 echo_supervisord_conf > /etc/supervisord.conf。如果您没有root用户访问权限,则无法使用。

如果你没有root访问权限,或者你不想把 supervisord.conf文件/etc/supervisord.conf,你可以将它放在当前目录(echo_supervisord_conf > supervisord.conf),并开始supervisord与 - c标志以指定配置文件位置。

例如,supervisord -c supervisord.conf。使用-c 标志其实就是在这种情况下多余的,因为 supervisord搜索当前目录下的 supervisord.conf之前,它会搜索该文件的任何其他地方,但它会奏效。有关-c标志的更多信息

配置文件内容说明
#配置文件分为几部分:
[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700                 ;socket文件的mode,默认是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid

;[inet_http_server]         ;HTTP服务器,提供web管理界面
;port=127.0.0.1:9001        ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user              ;登录管理后台的用户名
;password=123               ;登录管理后台的密码

[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB        ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10           ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024                  ;可以打开的文件描述符的最小值,默认 1024
minprocs=200                 ;可以打开的进程数的最小值,默认 200

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord

#[program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/bin/cat     ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
user=root            ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
stdout_logfile=/a/path ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程

;包含其它配置文件
[include]
files = relative/directory/*.ini    ;可以指定一个或多个以.ini结束的配置文件

测试

修改/etc/supervisord.conf文件
[include]
files = /etc/supervisor/conf.d/*.conf
添加运行的程序
[program:test]
command=php index.php  # 运行命令    
directory=/tmp/        # 运行文件目录
autostart=true         # 自动启动
startsecs=2            # 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
startretries=3         # 启动失败自动重试次数,默认是3  
stopsignal=TERM        # 请求停止时用于终止程序的信号。可以是TERM,HUP,INT,QUIT,KILL,USR1或USR2中的任何一个  

运行supervisord、supervisorctl
# 运行supervisord
supervisord -c /etc/supervisord.conf

# 运行supervisorctl
supervisorctl -c /etc/supervisord.conf
查看脚本运行状态
foo                              RUNNING   pid 80, uptime 1:58:59
test                             RUNNING   pid 339, uptime 0:00:08

可以通过RUNNING 看出test正在运行;

管理进程的命令
stop test # 停止test进程
start test # 运行test进程
...

以上就可以管理进程了

遇到的问题

1. 操作supervisorctl 查看没有test进程
问题原因在于:[include] 没有打开,谨记!!!。 
2.Unlinking stale socket /tmp/supervisor.sock
unlink /tmp/supervisor.sock
posted @ 2020-05-07 18:34  lxiaodong  阅读(2051)  评论(0编辑  收藏  举报