【开发工具】好用的进程管理工具supervisor

supervisor配置与使用

    • 概述
    • 配置文件详解
    • 其他高级用法
    • 相关文献

概述

Supervisor是一个用Python编写的进程管理工具,主要用于在类Unix系统中管理和监控长时间运行的进程。以下是对它的详细介绍:

一、功能特点

  1. 进程监控
    • Supervisor可以自动启动、停止和重启进程。当被管理的进程意外退出时,它能够自动重新启动该进程,确保服务的连续性。例如,如果你有一个Web服务器进程(如Gunicorn),如果由于某种原因(如内存不足导致的段错误)崩溃,Supervisor会检测到并立即重新启动它,减少服务中断的时间。
  2. 日志管理
    • 它会捕获被管理进程的标准输出(stdout)和标准错误(stderr),并将这些输出记录到日志文件中。这对于调试程序非常有用,因为你可以通过查看日志来了解进程的运行状态和可能出现的错误。例如,当一个Python脚本在运行过程中抛出异常,其错误信息会被记录到Supervisor管理的日志文件中,方便开发人员定位问题。
  3. 进程分组管理
    • 可以将多个相关的进程划分到一个组中进行统一管理。例如,在一个Web应用程序环境中,你可以将Web服务器进程、后台任务处理进程等划分到一个名为“web_app_group”的组中。这样,你可以通过操作组来同时启动、停止或重启组内的所有进程,方便在部署或维护环境时进行操作。
  4. 远程管理
    • 支持通过XML - RPC接口进行远程管理。这意味着你可以在一台远程机器上,通过网络连接到运行Supervisor的服务器,对进程进行管理操作。比如,系统管理员可以在自己的管理控制台中,远程控制服务器上的各种服务进程,而无需直接登录到服务器。

二、安装和配置

  1. 安装
    • 在大多数Linux发行版中,可以使用包管理器进行安装。以Ubuntu为例,使用命令sudo apt - get install supervisor进行安装。在CentOS系统中,可以使用yum install supervisor命令安装。安装完成后,Supervisor的相关命令(如supervisorctl)就可以在系统中使用了。
  2. 配置文件
    • Supervisor的主要配置文件通常是/etc/supervisor/supervisord.conf。这个文件用于配置Supervisor自身的运行参数,如日志文件位置、监听的IP地址和端口等。同时,在/etc/supervisor/conf.d/目录下可以创建针对各个被管理进程的配置文件。
    • 例如,要配置一个简单的Python脚本进程,你可以在conf.d目录下创建一个名为my_python_script.conf的文件,内容可能如下:
    [program:my_python_script]
    command=/usr/bin/python /path/to/your/script.py
    directory=/path/to/your/script/directory
    autostart=true
    autorestart=true
    stderr_logfile=/var/log/my_python_script.err.log
    stdout_logfile=/var/log/my_python_script.out.log
    
    • 在这个配置文件中,[program:my_python_script]是一个节(section)标题,用于标识这个配置是针对名为my_python_script的进程。command指定了要运行的命令,这里是运行一个Python脚本的命令。directory指定了执行命令的工作目录。autostartautorestart分别设置为true,表示进程会自动启动并且在意外退出时自动重启。stderr_logfilestdout_logfile则指定了标准错误和标准输出的日志文件路径。

三、使用方法

  1. 启动和停止进程
    • 使用supervisorctl命令来管理进程。要启动一个已经配置好的进程,例如上面提到的my_python_script,可以在命令行中输入supervisorctl start my_python_script。如果要停止这个进程,可以使用supervisorctl stop my_python_script
  2. 查看进程状态
    • 通过supervisorctl status命令可以查看所有被管理进程的状态。它会显示每个进程的名称、状态(如RUNNING、STOPPED等),以及进程已经运行的时间等信息。例如:
    my_python_script              RUNNING   pid 12345, uptime 0:10:30
    
    • 这个输出表示my_python_script进程正在运行,进程ID是12345,已经运行了10分30秒。
  3. 重新加载配置
    • 当你修改了Supervisor或者被管理进程的配置文件后,需要重新加载配置才能使修改生效。可以使用supervisorctl reload命令来重新加载配置。这会让Supervisor根据新的配置文件来启动、停止或调整被管理的进程。

Supervisor在服务器管理和自动化运维领域发挥着重要的作用,能够有效地提高进程管理的效率,保障服务的稳定运行。

配置文件详解

  1. Supervisor配置文件结构

    • Supervisor配置文件采用INI格式,主要由多个节(section)组成。每个节以方括号([])包围的名称开始,例如[supervisord][program:your_program_name]等。每个节包含一系列键 - 值对,用于设置相关的参数。
  2. 主配置节[supervisord]

    • logfile:指定Supervisor自身日志文件的路径。例如logfile=/var/log/supervisor/supervisord.log,Supervisor会将自己的运行情况、错误信息等记录在此日志文件中。
    • pidfile:设置Supervisor主进程的PID(进程标识符)文件位置,如pidfile=/var/run/supervisor/supervisord.pid。这个文件用于操作系统识别Supervisor主进程,方便对其进行管理,如发送信号来停止或重启它。
    • nodaemon:如果设置为true,Supervisor将在前台运行,通常用于调试目的。默认值为false,表示在后台以守护进程的方式运行。例如nodaemon=false
    • minfdsminprocsminfds规定了Supervisor启动时所需的最小文件描述符数量,minprocs规定了最小进程数量。这些参数在一些特殊的系统环境或者对资源有严格要求的场景下可能会用到,一般情况下可以使用默认值。
  3. HTTP服务器配置节[inet_http_server](可选)

    • port:用于设置HTTP接口监听的端口。例如port = 9001,通过这个端口可以使用浏览器或者其他HTTP客户端来远程访问Supervisor的管理界面,查看进程状态等信息。
    • usernamepassword:用于设置HTTP访问的认证信息,以增加安全性。例如username=adminpassword=your_password
  4. supervisorctl工具配置节[supervisorctl]

    • serverurl:指定supervisorctl连接Supervisor服务器的URL。通常格式为serverurl = http://localhost:9001,如果Supervisor是通过网络远程管理的,需要将localhost替换为实际的服务器IP地址。
  5. 进程配置节[program:your_program_name]

    • command:这是关键参数,用于指定要运行的进程的命令。例如,对于一个简单的Node.js服务器,可能是command = node /path/to/your/server.js
    • directory:指定进程运行的工作目录。例如directory=/path/to/your/program/directory,这个目录应该包含进程运行所需的所有文件,如代码文件、配置文件等。
    • autostart:设置为true时,Supervisor会在自身启动时自动启动该进程;设置为false则不会自动启动。例如autostart=true
    • autorestart:当设置为true,如果进程意外退出,Supervisor会自动重新启动它。例如autorestart=true
    • startsecs:定义了进程启动后,Supervisor等待多长时间后才认为进程启动成功。例如startsecs = 5,表示如果进程在启动后的5秒内没有退出,就认为它启动成功了。
    • stderr_logfilestdout_logfile:分别用于指定进程的标准错误和标准输出的日志文件路径。例如stderr_logfile=/var/log/your_program/error.logstdout_logfile=/var/log/your_program/output.log
  6. 完整示例

[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisor/supervisord.pid
nodaemon=false

[inet_http_server]
port = 9001
username = admin
password = your_password

[supervisorctl]
serverurl = http://localhost:9001

[program:my_web_server]
command = gunicorn -w 4 -b 0.0.0.0:8000 myapp:app
directory = /home/user/myapp
autostart = true
autorestart = true
startsecs = 5
stderr_logfile = /var/log/my_web_server/error.log
stdout_logfile = /var/log/my_web_server/output.log

在这个示例中:

  • 首先在[supervisord]节设置了Supervisor自身的日志文件和PID文件位置,并且让它在后台运行。
  • 接着在[inet_http_server]节开启了HTTP服务器监听端口9001,并设置了访问的用户名和密码,用于远程管理。
  • [supervisorctl]节配置了连接Supervisor服务器的URL。
  • 最后在[program:my_web_server]节配置了一个名为my_web_server的进程,它是一个使用Gunicorn运行的Flask应用程序(myapp:app是应用程序入口),设置了工作目录、自动启动和自动重启等参数,并且指定了标准错误和标准输出的日志文件路径。

其他高级用法

  1. 进程组管理
    • 创建进程组
      • 可以在配置文件中通过定义多个[program:xxx]节来创建进程组。这些进程可以是相关的服务,例如一个Web应用中,前端服务器(如Nginx)和后端服务器(如Gunicorn)可以放在一个组中。在配置文件中,它们的[program:xxx]节可以有类似[program:nginx][program:gunicorn]这样的标识。
    • 统一管理进程组
      • 使用supervisorctl命令对进程组进行操作。例如,如果将Nginx和Gunicorn进程定义在一个名为web_service_group的组中,可以使用supervisorctl start web_service_group:*来同时启动组内的所有进程。同样,supervisorctl stop web_service_group:*可以停止组内所有进程。这种统一管理方式在部署或更新服务时非常方便,可以确保相关进程按照正确的顺序启动和停止。
  2. 事件通知机制
    • 配置事件监听器
      • Supervisor支持通过配置事件监听器来接收进程相关的事件通知。可以在配置文件中设置[eventlistener:xxx]节。例如,[eventlistener:my_listener],在这个节中,通过command参数配置一个脚本或者程序来接收事件。这个脚本可以是用Python、Shell等语言编写的,用于处理Supervisor发送的事件消息。
    • 事件类型和处理
      • 常见的事件包括进程启动(PROCESS_STATE_STARTING)、进程停止(PROCESS_STATE_STOPPED)、进程退出(PROCESS_STATE_EXITED)等。当这些事件发生时,配置的监听器脚本会收到相应的消息。例如,当一个关键的服务进程停止时,监听器脚本可以发送一封电子邮件给管理员,提醒他们及时处理。
  3. 动态添加和删除进程配置
    • 使用RPC接口动态管理
      • Supervisor提供了XML - RPC接口,可以通过编程方式动态地添加、修改或删除进程配置。例如,在Python中,可以使用xmlrpc.client模块来连接Supervisor的RPC接口。以下是一个简单的示例代码,用于动态添加一个进程配置:
      import xmlrpc.client
      
      # 连接Supervisor的RPC接口
      supervisor_server = xmlrpc.client.ServerProxy("http://localhost:9001/RPC2")
      # 定义新进程的配置参数
      new_program_config = {
          "name": "new_program",
          "command": "python /path/to/new_script.py",
          "autostart": True,
          "autorestart": True
      }
      # 通过RPC接口添加新进程配置
      supervisor_server.supervisor.addProgramConfig(new_program_config)
      
      • 这样就可以在运行时动态地将一个新的进程添加到Supervisor的管理范围内,而无需手动修改配置文件并重新加载。同样,也可以通过RPC接口删除进程配置,实现更灵活的进程管理。
  4. 自定义监控脚本与Supervisor集成
    • 编写自定义监控脚本
      • 除了Supervisor自带的进程监控功能外,还可以编写自定义的监控脚本。例如,编写一个脚本用于监控进程的内存使用情况。这个脚本可以定期检查被管理进程的内存占用,并根据预设的阈值来判断是否需要采取措施。
    • 集成到Supervisor管理中
      • 将自定义监控脚本作为一个单独的[program:xxx]配置添加到Supervisor配置文件中。通过设置autostartautorestart参数,确保监控脚本能够持续运行。当监控脚本检测到异常情况(如进程内存占用过高)时,可以通过Supervisor的supervisorctl命令或者RPC接口来对相关进程进行处理,如重启进程或者调整其运行参数。

相关文献

【官网地址】

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

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

相关文章

物联网云平台:构建物联网生态的核心

我们常说的物联网,简称是IoT, 全称 Internet of Things。 用通俗的语言理解物联网,其实就是万事万物的互联网络。物联网概念也已经传播很多年了, 目前正在各行各业发挥力量。 要构建一个物联网生态, 我们首先想到的是智…

VS2022引入sqlite数据库交互

法一:用官网编译好的动态库(推荐) 下载所需文件 sqlite官网地址:https://www.sqlite.org/howtocompile.html 下载以下的2个压缩包 第一个压缩包 sqlite-amalgamation-xxxx.zip,xxxx是版本号,保持一致即可,这里面有sqite3.h 第…

设计模式学习[15]---适配器模式

文章目录 前言1.引例2.适配器模式2.1 对象适配器2.2 类适配器 总结 前言 这个模式其实在日常生活中有点常见,比如我们的手机取消了 3.5 m m 3.5mm 3.5mm的接口,只留下了一个 T y p e − C Type-C Type−C的接口,但是我现在有一个 3.5 m m 3.…

Markdown如何导出Html文件Markdown文件

Markdown如何导出Html文件Markdown文件 前言语法详解小结其他文章快来试试吧☺️ Markdown 导出 HTML 👈点击这里也可查看 前言 Markdown的源文件以md为后缀。Markdown是HTML语法的简化版本,它本身不带有任何样式信息。我们所看到的Markdown网页(如&…

Python安装(新手详细版)

前言 第一次接触Python,可能是爬虫或者是信息AI开发的小朋友,都说Python 语言简单,那么多学一些总是有好处的,下面从一个完全不懂的Python 的小白来安装Python 等一系列工作的记录,并且遇到的问题也会写出&#xff0c…

JMeter + Grafana +InfluxDB性能监控 (二)

您可以通过JMeter、Grafana 和 InfluxDB来搭建一个炫酷的基于JMeter测试数据的性能测试监控平台。 下面,笔者详细介绍具体的搭建过程。 安装并配置InfluxDB 您可以从清华大学开源软件镜像站等获得InfluxDB的RPM包,这里笔者下载的是influxdb-1.8.0.x86_…

STL常用容器总结

1.Vector容器特性 vector 容器是一个长度动态改变的动态数组,既然也是数组,那么其内存是一段连续的内存,具有数组的随机存取的优点。 / 1.1.vector特性总结: 1.vector 是动态数组,连续内存空间,具有随机存取效率高的…

BBP飞控板中的坐标系变换

一般飞控板中至少存在以下坐标系: 陀螺Gyro坐标系加速度计Acc坐标系磁强计Mag坐标系飞控板坐标系 在BBP飞控板采用的IMU为同时包含了陀螺(Gyro)及加速度计(Acc)的6轴传感器,故Gyro及Acc为同一坐标系。同时…

【OAuth2系列】如何使用OAuth 2.0实现安全授权?详解四种授权方式

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 【OAuth2系列】集成微…

鸿蒙MPChart图表自定义(六)在图表中绘制游标

在鸿蒙开发中,MPChart 是一个非常强大的图表库,它可以帮助我们创建各种精美的图表。今天,我们将继续探索鸿蒙MPChart的自定义功能,重点介绍如何在图表中绘制游标。 OpenHarmony三方库中心仓 一、效果演示 以下是效果演示图&…

《新概念模拟电路》-电流源电路

电流源电路 本系列文章主要学习《新概念模拟电路》中的知识点。在工作过程中,碰到一些问题,于是又翻阅了模电这本书。我翻阅的是ADI出版的,西安交通大学电工中心杨建国老师编写的模电书。 本文主要是基于前文《新概念模拟电路》-三极管的基础…

Java实现下载excel模板,并实现自定义下拉框

GetMapping("excel/download")ApiOperation(value "模板下载")public void getUserRecordTemplate(HttpServletResponse response, HttpServletRequest request) throws IOException {OutputStream outputStream response.getOutputStream();InputStream…

C 实现植物大战僵尸(四)

C 实现植物大战僵尸(四) 音频稍卡顿问题,用了 SFML 三方库已优化解决 安装 SFML 资源下载 https://www.sfml-dev.org/download/sfml/2.6.2/ C 实现植物大战僵尸,完结撒花(还有个音频稍卡顿的性能问题,待…

回归预测 | MATLAB实现CNN-BiLSTM-Attention多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiLSTM-Attention多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiLSTM-Attention多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 一、方法概述 CNN-BiLSTM-Attention多输入单输出回归预测方法旨在通过融合CNN的局…

Ansible之批量管理服务器

文章目录 背景第一步、安装第二步、配置免密登录2.1 生成密钥2.2 分发公钥2.3 测试无密连接 背景 Ansible是Python强大的服务器批量管理 第一步、安装 首先要拉取epel数据源,执行以下命令 yum -y install epel-release安装完毕如下所示。 使用 yum 命令安装 an…

让css设置的更具有合理性

目录 一、合理性设置宽高 二、避免重叠情况,不要只设置最大宽 三、优先使用弹性布局特性 四、单词、数字换行处理 五、其他编码建议 平常写css时,除了遵循一些 顺序、简化、命名上的规范,让css具有合理性也是重要的一环。 最近的需求场…

【微服务】1、引入;注册中心;OpenFeign

微服务技术学习引入 - 微服务自2016年起搜索指数持续增长,已成为企业开发大型项目的必备技术,中高级java工程师招聘多要求熟悉微服务相关技术。微服务架构介绍 概念:微服务是一种软件架构风格,以专注于单一职责的多个响应项目为基…

设计模式 结构型 组合模式(Composite Pattern)与 常见技术框架应用 解析

组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。通过这种模式,客户端可以一致地处理单个对象和对象组合。 在软件开发中,我们经常会遇到处理对象的层…

抢先体验:人大金仓数据库管理系统KingbaseES V9 最新版本 CentOS 7.9 部署体验

一、简介 KingbaseES 是中国人大金仓信息技术股份有限公司自主研发的一款通用关系型数据库管理系统(RDBMS)。 作为国产数据库的杰出代表,它专为中国市场设计,广泛应用于政府、金融、能源、电信等关键行业,以高安全性…

Linux驱动开发(17):输入子系统–电阻触摸驱动实验

有关电阻触摸的基础知识内容可以参考野火STM32相关教程,这里只介绍电阻触摸驱动的相关内容。与一般的微处理器 不同,本节使用的imx6ull内自带触摸屏控制器,只需要把电阻触摸屏的信号线接到对应的IO即可,通过配置imx6ull 触摸屏控制…