Supervisor - 用户进程监控利器

news2025/7/18 0:12:21

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 ; 启动失败自动重试次数,默认是 3
 
user = andy ; 用哪个用户启动
 
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
 
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
 
stdout_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.coloradmin.cn/o/38094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经网络和深度学习-logistic回归

logistic回归 logistic回归常用于分类问题 ,根据输入的x来估计属于不同类的概率为多少,满足分布,即所有类的概率总和为1 在torchvison包中提供了一些常用的数据集,供我们使用,例如:Mnist数据集 Cifar-10数…

力扣算法入门刷题2

12、删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 输入:head [1,1,2] 输出:[1,2[ //链表结构 public class ListNode {* int val;* List…

【情感识别】BP神经网络语音情感识别【含Matlab源码 349期】

⛄一、BP神经网络语音情感识别简介 0 引言 随着科技的迅速发展, 人机交互显得尤为重要。语音是语言的载体, 是人与人之间交流的重要媒介。相较于其它交流方式而言, 语音交流更加直接、便捷。近年来, 随着人机交互研究的不断深入, 语音情感识别更成为了学术界研究的热点, 其涉及…

3年测试经验,投了300多份简历,没公司要我...

前言 软件测试行业3年多经验,学历大专自考本科,主要测试方向web,PC端,wap站,小程序公众号都测试过,app也测过一些,C端B端都有,除功能外,接口性能也有涉猎,但…

一条命令能实现前端本地代码和打包仓库的自动化提交?

背景: 先介绍我们原本的代码上线流程:首先发布仓和代码仓(dev和master分支对应测试和生产环境)独立,每次修复或新增功能,首先需要提交改动到代码仓(fork),然后打包代码&…

TI Sitara系列 AM64x开发板——FreeRTOS、Baremetal案例开发案例

前 言 3 1 开发环境搭建 2 CCS工程编译与加载 3 FreeRTOS与Baremetal案例 评估板简介 创龙科技TL62x-EVM是一款基于TI Sitara系列AM62x单/双/四核ARM Cortex-A53 + 单核ARM Cortex-M4F异构多核处理器设计的高性能低功耗工业评估板,由核心板和评估底板组成。处理器ARM Cor…

SpringCloud之微服务实用篇2

在之前我们学习微服务中的两个组件,一个是注册中心,一个负载均衡器。今天,我们主要学习三个内容,分别是:Nacos配置管理、Feign远程调用、Gateway服务网关。 目录 一、Nacos配置管理 1.1、Nacos实现配置管理 1.2、微…

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

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

数论简单问题

数论基本问题约数个数问题约数之和问题1-n中所有1-n因子的数量n!分解后某个质因子的个数欧拉函数公式法求欧拉函数线性筛求欧拉函数欧拉函数在线性筛中的三种情况:欧拉定理逆元费马定理求逆元快速幂求逆元扩展欧几里得算法扩展欧几里得算法证明扩展欧几里得的应用中…

消息队列 - RabbitMQ

1. 名词解释 Producer:生产者 Broker:接收和分发消息的应用 Connection:生产者和消费者与 Broker 之间的 TCP 连接 Channel:信道;在 Connection 内部建立的逻辑连接,每个 Channel 之间是相互隔离的。相…

第十四届模拟赛第二期试题【Java解析】

目录 ✏️写在前面 ✨历史回顾 🎈第一题(二进制API) 代码: 思路: 🎈第二题(闰年问题/时间API) 代码1: 思路1: 代码2: 思路2&#xff1a…

【计算机网络】数据链路层:使用点对点信道的数据链路层

数据链路层信道类型: (1)点对点信道:使用一对一的点对点通信方式 (2)广播信道:使用一对多的广播通信方式。 必须使用专用的共享信道协议来协调主机数据发送。 链路:从一个节点到相邻节点的一…

TCP的三次握手和四次挥手

目录:smile_cat:基础知识回顾1、运输层概述2、端口号3、复用与分用:smiley_cat:重点知识来袭1、TCP和UDP2、三次握手3、四次挥手4、TCP报文段首部格式文章参考来源: TCP的三次握手和挥手–飞天小牛肉20-1-tcp连接——初始化序列号(ISN)_网络安全-CSDN博客_初始序列…

掌握分布式环境缓存更新策略,提高缓存与数据库数据一致性

概述 随着时代的发展,服务系统架构也已经由最初的单体架构转变为分布式、微服务架构模式。 从数据体量上来看,各系统存储的数据量越来越大,数据的查询性能越来越低。 此时,就需要我们不断的进行优化,最常用的就是引入…

NVIDIA RTX3090上安装tensorflow-gpu 1.12.0

目录 项目场景: 问题描述1 CUDA版本不匹配,需要重新安装 解决方案1: 额外安装其他版本的CUDA,并实现版本自由切换。 问题描述2: 1. cuDNN包解压后的cudnn.h文件无法复制到目标文件夹中 2. 如何查看是否会到最初…

计算机系统基础期末复习

C语言代码如下&#xff1a; void fun(int n){ int x n*12;int y n/32; }请将其中计算的部分优化为位运算、移位运算和加法运算的结合。 x n8n4 (n<<3)(n<<2) x (n(n>>31) & 0x1F)>>5 设32位的位串为x(x类型为unsigned int)&#xff0c;现要…

python dingding --- 钉钉机器人API

dingding — 钉钉机器人 github 源码地址&#xff1a;https://github.com/zly717216/dingding 一、模块介绍 版本号 dingding: V1.0.0 功能 当前版本支持群机器人相关API调用&#xff0c;包括发送文本消息、文本链接、markdown、整体跳转 ActionCard、独立跳转 ActionCar…

【MindSpore】DCGAN生成漫画头像-----利用华为云modelarts云终端实现

前言 本人对于 mindspore 一点也不熟悉 但是 对于 学习新事物的心情和动力 一直都很澎湃 本次参加 mindSpore 的 DCGAN生成漫画头像 社区活动&#xff0c;希望能够增长见识 关注 证明图 使用工具 我直接使用的 mindSpore 提供的在线云环境 的终端来 体验 这一次的任务训练 …

【Autopsy数字取证篇】Autopsy数字取证软件的下载安装与优化配置

【Autopsy数字取证篇】Autopsy数字取证软件的下载安装与优化配置 Autopsy是一款免费开源的优秀数字取证&#xff08;Digital Forensics&#xff09;软件&#xff0c;提供与其他数字取证工具相同的核心功能&#xff0c;并提供其他商业工具不提供的其他基本功能&#xff0c;例如…

video元素与audio元素详解

1.video/audio属性 video元素和audio元素是HTML5中针对视频新增的两个标签&#xff0c;通过对这两个标签进行设置&#xff0c;可以控制页面的 上的音视频的播放。 1.src 属性 设置音/视频文件的URL地址。相关使用代码如下: <video src"movie.mp4"></vide…