首页 > 运维 > linux运维 > 正文

如何配置Linux进程守护 supervisor进程管理方案

P粉602998670
发布: 2025-08-12 12:54:02
原创
213人浏览过

supervisor 是一个 linux 进程管理工具,能确保关键进程持续运行并在崩溃时自动重启。1. 安装 supervisor:在 debian/ubuntu 上使用 apt,centos/rhel 上使用 yum;2. 创建配置文件定义进程,包括 command、user、autostart、autorestart 等参数;3. 更新配置使用 supervisorctl reread 与 update;4. 使用 supervisorctl 命令管理进程启停与状态查看;5. 设置开机自启动通过 systemctl 或 update-rc.d;6. startsecs 参数用于判定进程启动成功所需时间;7. 使用 [group:] 定义进程组可统一管理多个进程;8. 监控资源需结合 ps、top 或专业工具如 prometheus 实现。

如何配置Linux进程守护 supervisor进程管理方案

Supervisor 是一个强大的进程管理工具,它能确保你的 Linux 系统上的关键进程持续运行,并在进程崩溃时自动重启。配置 Supervisor 的关键在于创建一个或多个配置文件,定义你要管理的进程,然后让 Supervisor 读取这些配置并启动、监控这些进程。

如何配置Linux进程守护 supervisor进程管理方案

解决方案

  1. 安装 Supervisor:

    如何配置Linux进程守护 supervisor进程管理方案

    在 Debian/Ubuntu 上:

    sudo apt update
    sudo apt install supervisor
    登录后复制

    在 CentOS/RHEL 上:

    如何配置Linux进程守护 supervisor进程管理方案
    sudo yum install epel-release  # 如果没有 EPEL 仓库
    sudo yum install supervisor
    登录后复制
  2. 创建配置文件:

    Supervisor 的配置文件通常位于

    /etc/supervisor/conf.d/
    登录后复制
    目录下。为你的每个进程创建一个单独的配置文件,例如
    my_app.conf
    登录后复制

    sudo nano /etc/supervisor/conf.d/my_app.conf
    登录后复制

    配置文件内容示例:

    [program:my_app]
    command=/path/to/your/application  ; 启动命令
    user=your_user                      ; 运行用户
    autostart=true                    ; Supervisor 启动时自动启动
    autorestart=true                  ; 进程崩溃时自动重启
    redirect_stderr=true              ; 重定向标准错误输出
    stdout_logfile=/var/log/my_app.log ; 标准输出日志文件
    登录后复制
    • [program:my_app]
      登录后复制
      :定义进程名称,
      my_app
      登录后复制
      可以自定义。
    • command
      登录后复制
      :进程的启动命令,替换为你的应用程序的实际路径。
    • user
      登录后复制
      :运行进程的用户,建议使用非 root 用户。
    • autostart
      登录后复制
      :设置为
      true
      登录后复制
      登录后复制
      登录后复制
      ,使 Supervisor 在启动时自动启动该进程。
    • autorestart
      登录后复制
      登录后复制
      :设置为
      true
      登录后复制
      登录后复制
      登录后复制
      ,使 Supervisor 在进程意外退出时自动重启它。
    • redirect_stderr
      登录后复制
      :设置为
      true
      登录后复制
      登录后复制
      登录后复制
      ,将标准错误输出重定向到日志文件。
    • stdout_logfile
      登录后复制
      :指定标准输出的日志文件路径。
  3. 更新 Supervisor 配置:

    创建或修改配置文件后,需要让 Supervisor 重新加载配置。

    sudo supervisorctl reread
    sudo supervisorctl update
    登录后复制
    • reread
      登录后复制
      :重新读取所有配置文件。
    • update
      登录后复制
      :根据新的配置启动或停止进程。
  4. 启动、停止和重启进程:

    使用

    supervisorctl
    登录后复制
    登录后复制
    命令管理进程。

    sudo supervisorctl start my_app    ; 启动 my_app 进程
    sudo supervisorctl stop my_app     ; 停止 my_app 进程
    sudo supervisorctl restart my_app  ; 重启 my_app 进程
    sudo supervisorctl status my_app   ; 查看 my_app 进程状态
    sudo supervisorctl status           ; 查看所有进程状态
    登录后复制
  5. 开机自启动 Supervisor:

    Supervisor 通常会自动配置为开机自启动。如果没有,可以使用以下命令手动配置:

    在 systemd 系统上 (例如 Ubuntu 16.04+, CentOS 7+):

    sudo systemctl enable supervisor
    登录后复制

    在 SysVinit 系统上 (较旧的 Linux 发行版):

    sudo update-rc.d supervisor defaults
    登录后复制

Supervisor 配置文件中的

startsecs
登录后复制
登录后复制
登录后复制
参数有什么用?

startsecs
登录后复制
登录后复制
登录后复制
参数定义了进程在启动后被 Supervisor 认为“成功启动”所需的时间(秒)。如果进程在
startsecs
登录后复制
登录后复制
登录后复制
秒内退出,Supervisor 会认为启动失败,并根据
autorestart
登录后复制
登录后复制
设置进行处理(通常是重启)。这个参数对于那些启动需要一些时间的服务非常有用,可以避免 Supervisor 误判进程启动失败而频繁重启。 默认值是 1 秒,但对于启动缓慢的应用程序,可能需要调整到 5 秒甚至更长。

如何使用 Supervisor 管理多个进程组?

Supervisor 支持进程组的概念,允许你同时管理多个相关的进程。你可以在配置文件中使用

[group:group_name]
登录后复制
来定义一个进程组,然后将多个进程添加到该组中。

例如:

[group:web_app]
programs=my_app, celery_worker

[program:my_app]
command=/path/to/your/web_app
user=www-data
autostart=true
autorestart=true

[program:celery_worker]
command=/path/to/your/celery_worker
user=www-data
autostart=true
autorestart=true
登录后复制

然后,你可以使用

supervisorctl
登录后复制
登录后复制
命令来管理整个进程组:

sudo supervisorctl start web_app:*  ; 启动 web_app 组中的所有进程
sudo supervisorctl stop web_app:*   ; 停止 web_app 组中的所有进程
sudo supervisorctl restart web_app:* ; 重启 web_app 组中的所有进程
sudo supervisorctl status web_app:*  ; 查看 web_app 组中所有进程的状态
登录后复制

注意,

web_app:*
登录后复制
中的
*
登录后复制
是通配符,表示该组中的所有进程。

如何监控 Supervisor 管理的进程的 CPU 和内存使用情况?

Supervisor 本身不提供直接的 CPU 和内存监控功能。但是,你可以结合其他工具来实现这个目标。一个常见的方法是使用

ps
登录后复制
命令结合
awk
登录后复制
top
登录后复制
命令来获取进程的 CPU 和内存使用情况,然后将这些信息记录到日志文件中。

例如,你可以创建一个脚本,定期运行以下命令,并将结果写入日志文件:

#!/bin/bash

process_name="my_app"  # 替换为你的进程名称
pid=$(pidof $process_name)

if [ -n "$pid" ]; then
  cpu_usage=$(ps -p $pid -o %cpu | tail -n 1)
  mem_usage=$(ps -p $pid -o %mem | tail -n 1)

  echo "$(date) - CPU: $cpu_usage%, Memory: $mem_usage%" >> /var/log/my_app_resource.log
else
  echo "$(date) - Process '$process_name' not found." >> /var/log/my_app_resource.log
fi
登录后复制

然后,你可以使用 Supervisor 来管理这个监控脚本,并设置定期执行。 另一种选择是使用更专业的监控工具,例如 Prometheus 或 Grafana,它们可以提供更全面的监控指标和可视化界面。 你需要配置这些工具来收集 Supervisor 管理的进程的指标,并将数据展示出来。 具体的配置方法取决于你选择的监控工具。

以上就是如何配置Linux进程守护 supervisor进程管理方案的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号