Supervisor - 用户进程监控利器
创始人
2024-02-17 16:37:42

Supervisor

Supervisor 是一个客户端/服务器系统,允许用户在UNIX操作系统上监视、控制用户进程。从定义里面分析包含两层意思。

  • 监控进程 - 监控进程状态 确定当前进程是否发生异常
  • 控制进程 - 针对进程异常情况 控制进程的行为 如重启当前进程

Supervisor 通过 Fork 子进程的方式,启动用户进程 - (应用程序),因此父进程可以实时感知到子进程各种状态,从而根据状态分析达到控制进程的目的。

这是一个非常有用的运维小工具,假设公司的项目没有使用Docker、K8S等容器化管理等技术进行系统部署,那么难免发生系统奔溃、意外宕机、服务异常等情况。特别是节假日或者非工作日的时候,需要第一时间重启应用,保证服务正常运行。

软件安装

系统要求

Supervisor在大多数UNIX系统上运行良好,支持Linux(Ubuntu 18.04)、Mac OS X(10.4/10.5/10.6)、Solaris(10 for Intel)和FreeBSD 6.1上运行。Supervisor不支持Windows系统,Supervisor支持Python 3 3.4版 及以上版本;Python 2 支持 Python 2 2.7版及以上版本。

系统组件

Supervisor由supervisordsupervisorctlWeb ServerXML-RPC Interface 几个核心组件组成,下面对它们对详细的介绍:

supervisord

supervisord 是Supervisor服务端组成部分,负责启动子程序、响应客户端命令、重启崩溃或者退出的子进程,记录子进程stdout、stderr输出,并生成和处理与子进程生存期中的点相对应的“事件”。

服务器进程使用配置文件,此配置文件通常位于/etc/supervisord.conf中。通过适当的文件系统权限确保此文件的安全非常重要,因为它可能包含未加密的用户名和密码。

supervisorctl

Supervisor 客户端部分名为supervisorctl。它为supervisord提供的功能提供了一个类似shell的接口。通过supervisorctl,用户可以连接到不同的supervisord进程,获取由控制的子进程的状态,停止和启动的子进程,以及获取supervisord正在运行的进程列表。

命令行客户端通过UNIX域套接字或internet(TCP)套接字与服务器通信。服务器可以断言客户端的用户在允许他执行命令之前应该出示身份验证凭据。客户机进程通常使用与服务器相同的配置文件。

Web Server

Web 交互界面,跟supervisorctl类似,提供可视化的Web用户界面。启用该功能后,访问服务器URL(例如: http://localhost:9001/), 通过web界面查看控制进程状态。

XML-RPC Interface

HTTP服务器暴露XML-RPC接口,可通过接口用于询问、控制 Supervisor 进程以及派生的子进程

安装

pip install supervisor

在这里插入图片描述

配置

Supervisor 配置文件通常命名为 supervisord.conf,服务端程序supervisord、客户端程序supervisorctl都需要使用该配置。如果启动时,没有指定 -c 参数。那么默认从以下目录中寻找第一个文件

  1. ../etc/supervisord.conf (相对路径 默认从当前目录开始寻找)
  2. ../supervisord.conf (相对路径 默认从当前目录开始寻找)
  3. $CWD/supervisord.conf
  4. $CWD/etc/supervisord.conf
  5. /etc/supervisord.conf
  6. /etc/supervisor/supervisord.conf (Supervisor 3.3.0以上版本)

创建系统目录

mkdir -p ~/tool/util/supervisor
mkdir -p ~/tool/util/supervisor/log
mkdir -p ~/tool/util/supervisor/tmp
# 创建应用系统配置文件夹
mkdir -p ~/tool/util/supervisor/conf.d
# 创建 supervisor 配置文件
vim  ~/tool/util/supervisor/supervisord.conf

创建服务端配置

# supervisord.conf
[unix_http_server]
file=~/tool/util/supervisor/tmp/supervisor.sock
chmod=0700[supervisord]
logfile = ~/tool/util/supervisor/log/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = ~/tool/util/supervisor/tmp/supervisord.pid
nodaemon = False
minfds = 256
minprocs = 200
umask = 022
identifier = supervisor
directory = ~/tool/util/supervisor/tmp
nocleanup = true
childlogdir = ~/tool/util/supervisor/tmp[supervisorctl]
serverurl = unix:///usr/local/tmp/supervisor.sock[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface# supervisor服务端启动时 根据应用系统配置 启动应用程序
[include]
files = conf.d/*.conf

应用系统配置

# cd ~/tool/util/supervisor/conf.d
# vim springboot-study.conf
# spring-boot-study 系统名称
[program:spring-boot-study]directory = /${path}/springboot-study ; 程序的启动目录 (最好使用绝对路径),根据实际情况替换 ${path}command = java -Xms512m -Xmx512m -jar target/springboot-study-0.0.1-SNAPSHOT.jar ; 启动命令,可以看出与手动在命令行启动的命令是一
样的autostart = true ; 在 supervisord 启动的时候也自动启动startsecs = 30 ; 启动 30 秒后没有异常退出,就当作已经正常启动了autorestart = true ; 程序异常退出后自动重启startretries = 3 ; 启动失败自动重试次数,默认是 3user = andy ; 用哪个用户启动redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 falsestdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MBstdout_logfile_backups = 20 ; stdout 日志文件备份数; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = ~/tool/util/supervisor/log/springboot-test.log ;应用日志目录 (最好使用绝对路径),根据实际情况替换 ${path}

启动服务端

# 在启动服务的过程中 出现以下错误,可能是由于mac系统权限导致,需要更改配置文件中的目录
# INFO Increased RLIMIT_NOFILE limit to 1024
# socket.error reported errno.EACCES
# 第一步 进入目录
cd ~/tool/util/supervisor
# 第二步 指定配置文件并启动
supervisord -c supervisord.conf
# 第三步 查看启动进程
ps -ef | grep supervi

在这里插入图片描述

启动常规错误

在学习supervisor工具过程中可能需要频繁关闭重启,通常使用 kill 9 -pid 杀死进程然后重启,但是会遇到以下错误

# 查找进程id
ps -ef | grep supervisor
# 杀死进程
kill -9 pid
# 重启
supervisord -c supervisord.conf
Unlinking stale socket /Users/andy/tool/util/supervisor/tmp/supervisor.sock

解决以上错误有两种方式

  • rm -rf tmp/*
  • unlink tmp/supervisor.sock

基本命令

supervisorctl

  • supervisorctl status - 查看启动的应用程序
  • supervisorctl shutdown - 关闭应用程序和supervisor服务
  • supervisorctl stop spring-boot-study - 关闭应用程序
  • supervisorctl start spring-boot-study - 启动应用程序
  • supervisorctl restart spring-boot-study - 重启应用程序
  • supervisorctl reload - 重启supervisor服务 停止原有程序 重新启动进程
  • supervisorctl update - 根据配置文件 重启进程

Web 管理界面

SuperVisor 提供简单的web可视化界面,以达到管理应用程序(停止、重启、查看日志)的目的。优点是不需要使用登录服务器使用 supervisorctl工具管理应用进程(毕竟,生产环境的服务器尽量做到专人管理)。SuperVisor默认不开启HTTP服务,需要在 supervisord.conf 配置文件中增加以下内容

[inet_http_server]
port = 127.0.0.1:9001
username = user
password = 123

重启服务,在浏览器输入 127.0.0.1:9001

在这里插入图片描述

进程自动重启

了解前面的基础知识后,终于来到了今天学习的目的 - 当应用程序崩溃后,服务能够自动重启。测试顺序如下

  • 查看进程状态

    AndydeMacBook-Pro:supervisor andy$  supervisorctl status
    spring-boot-study                RUNNING   pid 70332, uptime 0:39:34
    
  • 手动杀死应用进程

    kill -9 70332
    
  • 重新查看进程状态

    AndydeMacBook-Pro:supervisor andy$  supervisorctl status
    spring-boot-study                RUNNING   pid 70729, uptime 0:00:40
    

    重新查看应用状态,发现PID 已经改变,可以确定系统已经重启

参考

https://blog.csdn.net/zl18310999566/article/details/103235490

https://blog.csdn.net/sinat_28371057/article/details/113012361

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...