supervisor简单使用
时间:2022-07-22
本文章向大家介绍supervisor简单使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
介绍
Supervisor 是用Python开发的一套通用的进程管理程序,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启,用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
安装
yum方式
yum install -y epel-release
yum install -y supervisor
apt方式
sudo apt install supervisor
pip方式
pip3 install supervisor
mkdir supervisor/{logs,run,supervisor.d} -p
echo_supervisord_conf > /etc/supervisord.conf
没有pip则需要自行查找安装,另外使用pip安装的没有用systemd去管理,这里加入systemd
# cat /usr/lib/systemd/system/supervisord.service
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
配置无误后执行
systemctl daemon-reload
systemctl start supervisord
基本使用
安装完成后,默认配置文件是在/etc/supervisor下
$ tree /etc/supervisor/
/etc/supervisor/
├── conf.d
└── supervisord.conf
配置文件参考
[root@cicd /usr/local/supervisor]# egrep -v "^;|^$" supervisord.conf
[unix_http_server]
file=/usr/local/supervisor/run/supervisor.sock ; the path to the socket file
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/usr/local/supervisor/run/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false ; start in foreground if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///usr/local/supervisor/run/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = supervisor.d/*.conf
可以写各种子配置文件,来达到对多服务,多进程的监控,配置非常简单,下面是一些参数配置参考
打开子配置文件
vim /etc/supervisord.conf
[include]
files = supervisord.d/*.conf
systemctl restart supervisord
nginx示例
command=nginx ; 程序启动命令
autostart=true ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
user=nginx ; 用哪个用户启动进程,默认是root
priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
stdout_logfile=/var/log/supervisor_test/test.log #当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程
下面我们以nginx为例,来配置一下Nginx的守护进程。
cat /etc/supervisor/conf.d/nginx.conf
[program:nginx]
command=/usr/sbin/nginx #这里会有问题吗?
autostart=true
startsecs=10
autorestart=true
startretries=3
user=root
priority=100
redirect_stderr=true
stdout_logfile_maxbytes=20MB
strout_logfile=/var/log/supervisor_test/nginx.log
stopasgroup=false
killasgroup=false
配置完成后,我们重启下supervisor服务
sudo systemctl restart supervisor.service
sudo systemctl enable supervisor.service #加入到开机启动
启动之后,我们检查下所监控的服务状态
$ sudo supervisorctl status
nginx FATAL Exited too quickly (process log may have details)
发现启动错误,这是为什么呢?查看nginx状态,发现了一些端倪
这里我们发现,nginx在启动时,默认就是放在后台,所以supervisor便做不到了。
注:supervisor不能监控后台进程,command 不能为后台运行命令
修改后如下:
# cat /etc/supervisor/conf.d/nginx.conf
[program:nginx]
command=/usr/sbin/nginx -g 'daemon off;'
autostart=true
startsecs=10
autorestart=true
startretries=3
user=root
priority=100
redirect_stderr=true
stdout_logfile_maxbytes=20MB
strout_logfile=/var/log/supervisor_test/nginx.log
stopasgroup=false
killasgroup=false
我们强杀nginx,看下有什么变化
killall nginx
查看supervisor日志
再次查看nginx
命令使用
supervisorctl 是 supervisord的命令行客户端工具
supervisorctl status:查看所有进程的状态
supervisorctl stop nginx:停止nginx
supervisorctl start nginx:启动nginx
supervisorctl restart nginx: 重启nginx
supervisorctl update :配置文件修改后可以使用该命令加载新的配置
supervisorctl reload: 重新启动配置中的所有程序
启停服务
启动:
supervisord -c supervisord.conf
关闭:
supervisorctl shutdown
以上就是supervisor的简单应用,后续再加上其他服务的配置
- 我差不多,哦不我已经是个废人了No.4
- 将Gradle项目发布到Jcenter和Maven Central
- FLAnimatedImage -ios gif图片加载框架介绍
- linux学习第八篇:文件或目录权限chmod,更改所有者和所属组chown,umask,隐藏权限lsattr_chattr
- linux学习第九篇:特殊权限set_uid,set_gid,stick_bit以及软连接文件,硬链接文件
- C#事件(event)的一个实例
- linux学习第十篇:find命令,文件名后缀
- linux学习第十一篇:linux和Windows互传文件,用户配置文件和密码配置文件,用户组管理以及用户管理
- linux学习第十二篇:usermod命令,用户密码管理,mkpasswd命令
- 一斤代码深入理解系列(三):微信小程序和服务器通信
- C#CreateGraphics方法的三种实现方式
- 一斤代码深入理解系列(四):微信小程序和服务器通信-WebSocket
- linux学习第十四篇:查看磁盘,文件大小命令:df,du;磁盘分区
- 二叉树的性质和常用操作代码集合
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LoRa节点开发——代码详解修改LoRaWAN相关参数
- 01 . Redis简介及部署主从复制
- 07 . Kubernetes之Service
- LoRa节点开发——代码详解如何修改发射和接收信道(频率)
- 06 . Kubernetes之Pod控制器详细介绍及应用
- Python面试题
- 08 . Kubernetes之 ingress及Ingress Controller
- cpu占用过高排查
- LoRa节点开发——代码详解LoRaWAN发送与接收数据
- java编程思想第四版第十四章 类型信息习题
- 聊一聊,如何解密、分析LoRaWAN数据包?
- java编程思想第四版第十四章 类型信息总结
- 10 . Python之面向对象
- 11 . Python3之异常,调试和测试
- 张孝祥java高新技术 --- jkd1.5 新特性 -- 精华总结