5154

Good Luck To You!

centos7.2下如何安装并配置supervisor进程管理?

在服务器运维领域,确保应用程序持续稳定运行是核心任务之一,对于部署在 CentOS 7.2 这类稳定且广泛使用的服务器操作系统上的服务,一个强大的进程管理工具至关重要,Supervisor 正是这样一款基于 Python 开发的客户端/服务器系统,它允许用户监控和控制类 UNIX 操作系统上的多个进程,本文将详细介绍如何在 CentOS 7.2 环境下安装、配置和使用 Supervisor,以实现对应用程序的高效管理。

centos7.2下如何安装并配置supervisor进程管理?

Supervisor 的安装与初始化

Supervisor 并未包含在 CentOS 7.2 的默认基础仓库中,因此我们需要先启用 EPEL (Extra Packages for Enterprise Linux) 仓库。

通过 yum 命令安装 EPEL 仓库:

sudo yum install epel-release -y

安装完成后,就可以直接安装 Supervisor 了:

sudo yum install supervisor -y

安装过程会自动处理所有依赖,安装完毕后,需要将 Supervisor 服务设置为开机自启,并立即启动它:

sudo systemctl start supervisord
sudo systemctl enable supervisord

为了验证 Supervisor 是否成功运行,可以检查其状态:

sudo systemctl status supervisord

如果看到输出中包含 active (running) 字样,则表示 Supervisor 服务已正常启动,Supervisor 的主进程已经在后台运行,等待管理我们配置的应用程序。

Supervisor 的核心配置

Supervisor 的主要配置文件位于 /etc/supervisord.conf,这个文件定义了 Supervisor 自身的行为,例如服务端口、日志路径等,对于大多数场景,我们不需要过多修改此文件,其关键部分在于 [include] 片段,默认配置如下:

[include]
files = supervisord.d/*.ini

这行配置指示 Supervisor 除了加载主配置文件外,还会自动加载 /etc/supervisord.d/ 目录下所有以 .ini 结尾的配置文件,这是一种极佳的实践,它让我们可以为每一个需要管理的应用程序创建独立的配置文件,实现了配置的模块化和清晰管理。

centos7.2下如何安装并配置supervisor进程管理?

创建应用程序配置

假设我们有一个简单的 Python Web 应用,我们希望用 Supervisor 来管理它,我们可以在 /etc/supervisord.d/ 目录下创建一个名为 my_web_app.ini 的配置文件。

sudo vi /etc/supervisord.d/my_web_app.ini

可以如下所示:

[program:my_web_app]
command=python3 /var/www/my_app/app.py
directory=/var/www/my_app
user=nginx
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/my_web_app.log

这个配置文件定义了一个名为 my_web_app 的程序,下表解释了其中常用指令的含义:

指令 含义
[program:my_web_app] 定义一个程序,my_web_app 是其唯一标识符。
command 启动进程的命令,必须是能在前台持续运行的命令。
directory 进程启动前切换到的目录。
user 以哪个用户身份运行该进程。
autostart=true 在 Supervisor 启动时,是否自动启动此程序。
autorestart=true 当程序意外退出时,是否自动重启。
redirect_stderr=true 是否将标准错误输出重定向到标准输出。
stdout_logfile 标准输出日志文件的路径。

使用 supervisorctl 管理进程

配置文件创建或修改后,并不会立即生效,我们需要使用 supervisorctl 这个命令行客户端工具来通知 Supervisor 重新加载配置并应用更改。

让 Supervisor 读取新的或变更过的配置文件:

sudo supervisorctl reread

应用这些更改,这会启动新增的程序或重启配置发生变更的程序:

sudo supervisorctl update

我们可以使用 supervisorctl 来管理我们的进程了,以下是一些常用命令:

  • 查看所有进程状态
    sudo supervisorctl status
  • 启动指定进程
    sudo supervisorctl start my_web_app
  • 停止指定进程
    sudo supervisorctl stop my_web_app
  • 重启指定进程
    sudo supervisorctl restart my_web_app

supervisorctl 还提供了一个交互式 shell,直接输入 sudo supervisorctl 并回车即可进入,在其中可以直接输入 status, stop, start 等命令进行管理,无需每次都加 sudo

centos7.2下如何安装并配置supervisor进程管理?

启用 Web 管理界面

除了命令行,Supervisor 还提供了一个简洁的 Web 界面,方便进行可视化操作,要启用它,需要修改主配置文件 /etc/supervisord.conf,找到并取消注释 [inet_http_server] 部分,并进行如下配置:

[inet_http_server]
port=127.0.0.1:9001
username=admin
password=your_secure_password

修改保存后,重启 Supervisor 服务使配置生效:

sudo systemctl restart supervisord

之后,通过在本地访问 http://127.0.0.1:9001,并输入设定的用户名和密码,即可在浏览器中查看和管理所有进程状态。


相关问答 (FAQs)

问题1:我修改了 /etc/supervisord.d/ 目录下的配置文件,也执行了 supervisorctl reread,为什么程序还是没有按新配置启动?

回答: 这是一个常见的操作误区。supervisorctl reread 命令的作用仅仅是让 Supervisor 检测到配置文件的变更,它会告诉你哪些配置有了新的变化(available),但此时并不会真正应用这些变更(如启动新进程或重启旧进程),你必须接着执行 supervisorctl update 命令,Supervisor 才会根据 reread 的结果去实际地启动、停止或重启相应的进程,使配置生效,正确的流程是 reread update

问题2:在 CentOS 7 中,已经有了 systemd 作为系统和服务管理器,为什么还需要 Supervisor?它们之间是什么关系?

回答: 这是一个很好的问题,systemd 和 Supervisor 的定位和职责有所不同,systemd 是一个系统级的 init 系统,负责管理整个系统的启动、服务(守护进程)和关机流程,而 Supervisor 是一个应用级的进程管理器,它们可以协同工作,形成一种层级管理关系:让 systemd 来管理 Supervisor 服务(确保 Supervisor 自身是稳定运行的),然后让 Supervisor 来管理具体的应用程序,这样做的好处是,Supervisor 在管理应用程序方面提供了比 systemd 更精细的功能,非常方便的崩溃自动重启策略、分组管理、独立的日志轮转、以及强大的 Web UI 和 RPC 接口,特别是对于那些非“守护化”设计(即不能自行在后台运行)的应用程序,Supervisor 能非常轻松地将它们“守护化”,最佳实践通常是:systemd 管理 Supervisor,Supervisor 管理你的应用

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.