supervisor 安装配置及使用
Posted arnoldlivip
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于supervisor 安装配置及使用的主要内容,如果未能解决你的问题,请参考以下文章