supervisor使用详解

server/2024/12/15 5:19:40/

参考文章:

Supervisor使用详解

Supervisor 是一个用 Python 编写的客户端/服务器系统,它允许用户在类 UNIX 操作系统(如 Linux)上监控和控制进程。Supervisor 并不是一个分布式调度框架,而是一个进程管理工具,它可以用来启动、停止和重启程序,并且可以自动重启崩溃的程序,确保它们保持运行状态

以下是 Supervisor 的一些主要特点:

  1. 进程管理:Supervisor 可以管理多个子进程,确保它们按照配置文件中指定的方式运行。
  2. 自动重启:如果被监控的进程异常退出,Supervisor 可以根据设定的策略自动重启这些进程。
  3. 日志管理:它能够收集子进程的标准输出和标准错误流,并将它们写入日志文件中,方便调试和故障排查。
  4. 远程控制:通过 XML-RPC 接口,你可以从远程机器上与 Supervisor 进行交互,执行命令或获取状态信息。
  5. Web 界面:提供了一个简单的 Web 界面用于查看所有受管进程的状态以及进行基本的操作,如启动、停止或重启。
  6. 事件监听:支持事件监听机制,可以对特定事件作出反应,比如进程启动、退出等。

安装和使用

安装 Supervisor 通常可以通过包管理器完成:

# Debian 或 Ubuntu 上可以使用 apt-get
sudo apt-get install supervisor
# Centos
yum install supervisor

安装完成后,你需要编辑配置文件来定义哪些程序应该由 Supervisor 管理。配置文件一般位于 /etc/supervisor/conf.d/ 目录下。每个要管理的程序都有自己的 .conf 文件。

一个典型的配置文件可能看起来像这样:

# 样例:
[program:myapp]
command=/path/to/myapp    ; 启动命令
autostart=true            ; 在 supervisord 启动时自动启动此程序
autorestart=true          ; 当程序退出时自动重启
stderr_logfile=/var/log/myapp.err.log ; 错误日志路径
stdout_logfile=/var/log/myapp.out.log ; 标准输出日志路径
user=root              ; 使用哪个用户权限运行程序# 正式配置:
[program:test]
command=/root/miniconda3/envs/abr/bin/python /home/kes/test.py 
autostart=true                            
autorestart=true                           
stderr_logfile=/home/kes/test.err.log      
stdout_logfile=/home/kes/test.out.log      
user=root     

保存配置文件后,需要更新 Supervisor 的配置并重新加载:

sudo supervisorctl reread
sudo supervisorctl update

之后就可以使用 supervisorctl 命令行工具来管理应用程序了,例如启动、停止或重启服务。Supervisor 是一种非常有用的技术,特别是对于那些需要长时间运行的服务型应用,它可以确保即使是在非预期的情况下也能让这些服务持续可用。

# 设置开机自启
systemctl enable supervisord# 取消开机自启
systemctl disable supervisord# 检查是否开机自启
systemctl is-enabled supervisord# 立即启动 supervisord
systemctl start supervisord# 检查状态
systemctl status supervisord# 停止服务
systemctl stop supervisord# 重新加载服务配置
systemctl reload supervisord#进入子任务配置文件目录
cd /etc/supervisor/conf.d#创建子任务配置文件
touch test.ini#编辑配置文件
vi test.ini重新读取配置文件并应用更改
方式一:
supervisorctl reload:重新读取配置文件
supervisorctl update:更新运行中的程序以反映配置文件中的更改
supervisorctl start test:启动test程序
supervisorctl status test:检查程序的状态以确保它已经成功启动
方式二:
systemctl restart supervisord:停止并再次启动supervisord服务其他命令:
supervisorctl stop test:停止特定服务
supervisorctl stop all:停止所有服务

(base) [root@VM-16-6-centos ~]#  systemctl status supervisord
● supervisord.service - Process Monitoring and Control DaemonLoaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled)Active: active (running) since Sat 2024-12-14 23:06:15 CST; 1h 19min agoProcess: 4696 ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf (code=exited, status=0/SUCCESS)Main PID: 4699 (supervisord)Tasks: 5Memory: 395.1MCGroup: /system.slice/supervisord.service├─ 4699 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf├─24036 /root/miniconda3/envs/abr/bin/python /home/kes/test.py├─24118 /root/miniconda3/envs/abr/bin/python -c from multiprocessing.resource_tracker import ...└─24119 /root/miniconda3/envs/abr/bin/python -c from multiprocessing.spawn import spawn_main;...Dec 14 23:06:15 VM-16-6-centos systemd[1]: Stopped Process Monitoring and Control Daemon.
Dec 14 23:06:15 VM-16-6-centos systemd[1]: Starting Process Monitoring and Control Daemon...
Dec 14 23:06:15 VM-16-6-centos systemd[1]: Started Process Monitoring and Control Daemon.

根据提供的 systemctl status supervisord 输出,可以总结出以下信息:

Supervisord 服务状态

  • Loaded: 表明 supervisord.service 的单元文件已经被正确加载,并且它位于 /usr/lib/systemd/system/supervisord.service。该服务被设置为开机启动(enabled),但默认情况下供应商预设是禁用的(vendor preset: disabled)。

  • Active (running): 这表示 supervisord 服务当前正在运行,自 2024 年 12 月 14 日 23:06:15 CST 开始已经持续运行了大约 1 小时 19 分钟。

  • Process: 显示了启动 supervisord 服务的命令以及它的退出状态码(code=exited, status=0/SUCCESS),意味着启动过程成功完成。

  • Main PID: 主进程 ID 是 4699,对应于运行中的 supervisord 守护进程

  • Tasks: 当前由 supervisord 管理的任务数量为 5 个。

  • Memory: 服务占用的内存总量为 395.1 MB

  • CGroup: 列出了属于 supervisord 服务控制组的所有子进程。从输出中可以看到:

    • PID 4699 是主 supervisord 进程。
    • PID 24036 是您的 Python 脚本 /home/kes/test.py,它正在使用 Miniconda 环境中的 Python 解释器。
    • PIDs 24118 和 24119 看起来像是与 Python 的多处理模块相关的辅助进程,用于资源跟踪和进程生成。
  • 日志条目: 最后几行显示了 systemd 日志,记录了 supervisord 服务的停止、启动和再次启动的时间戳。


http://www.ppmy.cn/server/150267.html

相关文章

微服务网关SpringCloudGateway、Kong比较

网关产品 1. Spring Cloud Gateway 基本信息 Spring Cloud Gateway是Spring Cloud生态系统中的一个组件,基于Spring 5、Project Reactor和Spring Boot 2构建。它旨在为微服务架构提供一种简单而有效的API网关解决方案。 功能特点 路由功能强大:使用Rou…

EIP1967可升级合约详解

可升级代理合约方案:用户访问proxy合约,实际方法由logic合约实现。数据存储在proxy合约中 部署Proxy示例地址:https://testnet.bscscan.com/address/0xcb301306aa03115d40052eec804cc7458d03f1c2 // SPDX-License-Identifier: MIT pragma so…

QT笔记- QSystemTrayIcon系统托盘功能完整示例

1. 创建托盘对象 // 创建托盘图标QSystemTrayIcon * trayIcon new QSystemTrayIcon(this);QIcon icon("://icon/test.png");trayIcon->setIcon(icon);trayIcon->show();trayIcon->connect(trayIcon, &QSystemTrayIcon::activated,this, &MainWindo…

快速上手Neo4j图关系数据库

参考视频: 【IT老齐589】快速上手Neo4j网状关系图库 1 Neo4j简介 Neo4j是一个图数据库,是知识图谱的基础 在Neo4j中,数据的基本构建块包括: 节点(Nodes)关系(Relationships)属性(Properties)标签(Labels) 1.1 节点(Nodes) 节点…

抖音后端实习一面总结

置之死地而后生 抖音后端开发实习一面 自我介绍 你参加了PAT比赛?介绍一下? 平时有刷题吗?有的,那来做一下算法题目吧,单词拆分(动态规划1h过去了...) TCP有哪些状态?每种状态代表…

【3】数据分析基础(Numpy的计算)

在学习了N维数组的概念、常用属性以及如何创建一个N维数组后,我们来继续学习N维数组的计算。 我们将会从2个方向学习N维数组的计算: 1. 数组和数的计算 2.相同形状数组的计算 1. 数组和数的计算当数组和数字进行计算的时候,NumPy会将该数字的…

【开源免费】基于SpringBoot+Vue.JS渔具租赁系统(JAVA毕业设计)

本文项目编号 T 005 ,文末自助获取源码 \color{red}{T005,文末自助获取源码} T005,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 渔…

基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究|文献速递-生成式模型与transformer在医学影像中的应用速递

Title 题目 Mammography classification with multi-view deep learning techniques:Investigating graph and transformer-based architectures 基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究 01 文献速递介绍 乳腺X线检查是乳腺癌…