首页 > 系统相关 >【开发工具】好用的进程管理工具supervisor

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

时间:2025-01-05 19:29:50浏览次数:3  
标签:Supervisor log 配置文件 管理工具 开发工具 program 进程 supervisor my

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接口来对相关进程进行处理,如重启进程或者调整其运行参数。

相关文献

【官网地址】

标签:Supervisor,log,配置文件,管理工具,开发工具,program,进程,supervisor,my
From: https://blog.csdn.net/wendao76/article/details/144949541

相关文章

  • 开发工具推荐:IntelliJ IDEA 2024 教程 如何安装激活详细使用(激活至2026,实际上永久,亲
    申明:本教程IntelliJIDEA补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版!卸载老版本IDEA首先,如果小伙伴的电脑上有安装老版本的IDEA,需要将其彻底卸载掉,如下所示(没有安装则不用管,直接安装即可):TIP:如果你之前使......
  • Listary 6.3.1.85 Windows文件管理:高效文件管理工具
    点击上方蓝字关注我前言Listary是一个非常实用的Windows文件管理小帮手,它能让找文件和管理文件变得更快更容易。用了它,你可以更快地搜索到想要的文件或程序,还能通过一些快捷操作快速到达文件所在的位置。更重要的是,Listary能和Windows自带的文件管理器以及其他常用的文件管理软......
  • 如何使用项目管理工具来实施GTM(市场进入策略)
    可以说,只要有产品或服务需要推向市场的地方,就需要有GTM(Go-To-Market)策略。GTM是Go-To-MarketStrategy的缩写,翻译为市场进入策略或上市计划,是关于如何将产品有效地交付到目标用户手中,并实现商业价值的系统化方法。它涵盖了从市场调研、目标客户定位到产品推广的全流程,并确保企业在......
  • commsqlplus 数据库dba开发工具(二)
    帮助和连接信息(日后支持多种数据库,通用命令管理不同数据库) 查看参数:收集统计信息,查看表信息查看数据: 执行计划直接输出 帮忙在信息和status ......
  • commsqlplus 数据库dba开发工具(一)
    PG数据库,输出oracle格式的执行计划: 继续输出分析计划必要信息:执行过程中的活动监控:sqltext有三个pid  PG自有工具格式输出 ......
  • 网络异常监控管理工具
    什么是网络监控工具?1.1网络监控工具是软件应用程序或硬件设备,旨在帮助网络管理员保持对本地、云、虚拟和边缘网络及其组件的历史和实时流量的一致可见性。1.2网络监控考虑标准网络组件的行为、流量和健康状况,例如端点设备、防火墙、路由器、交换机和服务器。管理员......
  • python 资源管理工具V1
    python资源管理工具V1资源管理工具V1界面python3环境安装python-mpipinstallconfigparser==5.3.0-ihttps://pypi.tuna.tsinghua.edu.cn/simple/python-mpipinstallpymysql==0.9.3-ihttps://pypi.tuna.tsinghua.edu.cn/simple/python-mpipinstallpype......
  • 基于时间轴的项目进度管理工具
    在项目管理中,时间轴是一种强大的工具,它能够直观地展示项目的进度、任务的先后顺序以及时间的推移。通过时间轴,项目团队可以清晰地把握项目的整体节奏,及时发现潜在问题,做出合理的决策。市面上基于时间轴的项目进度管理工具众多,每一款都有其独特的特点和优势。本文将介绍几款典型的......
  • 基于看板的项目管理工具
    在项目管理领域,看板作为一种高效的可视化工具,正日益受到众多团队的青睐。它通过直观的展示方式,帮助团队成员清晰地了解项目的进展、任务分配以及工作流程。市面上基于看板的项目管理工具种类繁多,每一款都有其独特的特点和优势。本文将为大家介绍多款基于看板的项目管理工具,深入探......
  • 10款高效项目管理工具,让工作更轻松
    引言在当今快节奏的工作环境中,项目管理的效率直接影响着工作成果。无论是大型企业、小型创业团队还是个人自由职业者,都需要借助合适的项目管理工具来提升工作效率、实现目标。市面上项目管理工具种类繁多,每一款都有其独特的优势和适用场景。本文将为大家介绍10款高效项目管理工具......