Supervisor - 用户进程监控利器

news/2024/4/25 14:08:08/文章来源:https://blog.csdn.net/u013433591/article/details/128053939

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_226111.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于双目相机拍摄图像的深度信息提取和目标测距matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB程序 1.算法描述 双目相机一般由左眼和右眼两个水平放置的相机组成。当然也可以做成上下两个目,但我们见到的主流双目都是做成左右的。在左右双目的相机中,我们可以把两个相机都看作针…

如何简单理解大数据

如何简单理解大数据 HDFS-存储 海量的数据存储 hadoop 只是一套工具的总称,它包含三部分:HDFS,Yarn,MapReduce,功能分别是分布式文件存储、资源调度和计算。 按理来说,这就足够了,就可以完成大…

windows安装VMware虚拟机(附带CentOS7部署)

软件下载 链接:https://pan.baidu.com/s/1Vw2Bilf9uf-EYR6_MR86aA?pwdd2qr 提取码:d2qr VMware安装 通你上述链接下载VMware安装包,没有特别选项,选安装位置无脑下一步安装,安装完成后会提示你输入激活码&#xf…

MyBatis association解决多对一和collection解决一对多的映射关系

多对一的映射关系 创建Emp和Dept类 1.处理多对一映射关系方式一:级联属性赋值 2.处理多对一映射关系方式二:association实现 association:处理多对一的映射关系 property:需要处理多对的映射关系的属性名 javaType:该属性的类型 3.处理多对一映射关…

【活动预告】金融大数据治理实践分享(12/03)

原创 DAMA数据管理 # 本期主题 金融大数据治理实践分享 数字化时代,数据的价值受到越来越多的关注,有人将其比作黄金,也有人将其比作石油,成为组织中的最重要资产之一。针对数据这种有特殊属性的资产,也存在着采集…

26岁月薪从7k到17K,这一切都要从那年失业讲起...

女生,目前在成都做了快4年的测试 先来说说我自己是怎么入行的以及我学到的一些经验分享,希望能帮助到更多的朋友们 我大学学的并不是计算机相关专业,学的市场营销,毕业后大部分同学都去做销售或者商务BD了,奈何自己性…

[CVPR2022] Cross-Model Pseudo-Labeling for Semi-Supervised Action Recognition

Cross-Model Pseudo-Labeling for Semi-Supervised Action Recognition 要点: 1、半监督动作识别,使用伪标记分配未标记数据,然后在训练中用作附加的监督 2、最近研究:伪标签通过在标记数据上训练模型获取,然后使用来…

单源广度优先搜索 (leetcode经典例题 C++实现)

文章目录01矩阵地图分析腐烂的橘子深度优先搜索与广度优先搜索前情回顾: 深度搜索dfs与广度搜索bfs算法总结(c 例题) 本节是广度优先搜索的进阶: 01矩阵 传送门: https://leetcode.cn/problems/01-matrix/?envType…

如何Cisco的学员 摆脱游客登录

Cisco Packet Tracer 是一款强大的网络模拟工具,可用于在虚拟实验环境中练习网络、物联网和网络安全技能。您不需要任何硬件,即可获得实操经验! 相信很多小伙伴在使用cisco packet tracer这个思科数据包跟踪器 - 网络仿真工具时在登录的时候…

XML的创建和读取

rapidxml是一个快速的xml库,由C模板实现的高效率xml解析库,同时也是boost库的property_tree的内置解析库。 当使用rapidxml时,只需要把rapidxml.hpp 、 rapidxml_print.hpp 和 rapidxml_utils.hpp 三个文件拷贝到你的工程目录下,就…

Redis持久化策略AOF、RDB详解及源码分析

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 一、Redis为什么要持久化 Redis 是一个内存数据库,就是将数据库中的内容保存在内存中,这与传统的MySQL,Oracle等关系型数据库直接将内容保存到硬盘中相比,内存数据库的读写效…

Gof23-创建型-工厂-单例-抽象工厂-建造-原型以及UML的绘制

创建型的设计模式工厂模式单例模式抽象工厂建造者模式原型模式UML图形的绘制工厂模式 工厂模式 Factory Pattern 适用的场景:统一的接口作为统一的零件,实现类作为零件的组合,将实例产品类的生产交给工厂,用户只需要面对工程提取…

Java_接口

目录 1.接口的语法规则 2.接口使用 3.接口特性 4.实现多个接口 1)下面通过类来表示一组动物; 2)另外再提供一组接口, 分别表示 "会跑的", "会飞的", "会游泳的"; 3)接下来我们创建…

十九种卷积

参考文章:一文看尽深度学习中的20种卷积(附源码整理和论文解读) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/381839221 一、原始卷积(Vanilla Convolution) CNNs中的卷积,也称为滤波器,是由一组具有固定窗口大小且带可学习参数(learnable paramerters)的卷积核所组…

Unity 如何实现框选游戏战斗单位

文章目录🍔 Preface✨ 如何在屏幕坐标系内绘制框选框🎉 根据框选范围定位其在世界坐标系中对应的区域🥇 在该区域内进行物理检测🍔 Preface 本文简单介绍如何实现即时战略游戏中框选战斗单位的功能,如图所示&#xff…

【外卖项目实战开发二】

文章目录1、完善登录功能问题分析代码实现2、新增员工需求分析数据模型代码开发3、员工信息分页查询需求分析代码开发4、启用/禁用员工账号需求分析代码开发代码修复5、编辑员工信息需求分析代码开发1、完善登录功能 问题分析 前面我们已经完成了后台系统的员工登录功能开发&…

基于JavaWeb的婚恋交友网站设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

大数据:HDFS的Shell常用命令操作

文章目录一 HDFS的Shell介绍二 HDFS常用命令操作01 创建目录(1)创建单层目录(3)创建多层目录02 查看目录03 上传本地文件到HDFS04 查看文件内容05 下载HDFS文件到本地06 删除HDFS文件07 删除HDFS目录08 移动目录或文件09 文件合并…

第九章 堆排序与TOPK问题

第九章:堆排序与TOPK问题一、堆排序:1、思路分析:(1)建堆(2)排序2、堆排序模板二、TOPK问题:1、什么是TOPK问题?2、解决方法一、堆排序: 假设我们实现一个小…

26k Star, 理解Git太轻松了。。。

程序员宝藏库:gitee.com/sharetech_lee/CS-Books-Store Git是目前使用比较广泛一款版本控制工具,从事开发工作,很难绕开Git。 因此,关于如何快速学习Git使用一直都是一个经久不衰的话题。 前不久我在另外一篇文章中曾提到Git对初…