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 实现。

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

解决方案
安装 Supervisor:

在 Debian/Ubuntu 上:
sudo apt updatesudo apt install supervisor
在 CentOS/RHEL 上:

sudo yum install epel-release # 如果没有 EPEL 仓库sudo yum install supervisor
创建配置文件:
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
:指定标准输出的日志文件路径。
更新 Supervisor 配置:
创建或修改配置文件后,需要让 Supervisor 重新加载配置。
sudo supervisorctl rereadsudo supervisorctl update
reread
:重新读取所有配置文件。
update
:根据新的配置启动或停止进程。
启动、停止和重启进程:
使用
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 ; 查看所有进程状态
开机自启动 Supervisor:
Supervisor 通常会自动配置为开机自启动。如果没有,可以使用以下命令手动配置:
豆包AI编程
豆包推出的AI编程助手
483 查看详情
在 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_appuser=www-dataautostart=trueautorestart=true[program:celery_worker]command=/path/to/your/celery_workeruser=www-dataautostart=trueautorestart=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/bashprocess_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.logelse echo "$(date) - Process '$process_name' not found." >> /var/log/my_app_resource.logfi
然后,你可以使用 Supervisor 来管理这个监控脚本,并设置定期执行。 另一种选择是使用更专业的监控工具,例如 Prometheus 或 Grafana,它们可以提供更全面的监控指标和可视化界面。 你需要配置这些工具来收集 Supervisor 管理的进程的指标,并将数据展示出来。 具体的配置方法取决于你选择的监控工具。
以上就是如何配置Linux进程守护 supervisor进程管理方案的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/445285.html
微信扫一扫
支付宝扫一扫