Linux进程守护supervisor配置

运维过 Linux 服务器的朋友一定遇到过:程序跑着跑着就挂了,或者重启后没有自动拉起。
手动重启一次两次还能忍,如果天天半夜爬起来敲命令,那绝对要疯。
这时候就需要 进程守护工具 出场了。
supervisor 是目前最主流的 Linux 进程守护方案之一,用 Python 写成,安装简单,配置灵活,特别适合守护常驻后台的脚本、队列、微服务等。

为什么不用系统自带 systemd?

很多人会问:CentOS 7 以上不是自带 systemd 吗?
systemd 确实可以做进程守护,但对新手来说配置门槛偏高,而且调试起来不够直观。
supervisor 的配置文件语法更清晰,支持图形化管理(通过 web 界面),并且用户级安装不需要 root 权限,容器环境里也经常用它。
如果你的场景是管理少量用户进程,supervisor 明显更顺手。

安装 supervisor:两条命令搞定

不管你是 Ubuntu 还是 CentOS,安装都很简单。

Ubuntu / Debian 系列

sudo apt update
sudo apt install supervisor -y

CentOS / RHEL 系列

sudo yum install epel-release -y
sudo yum install supervisor -y

安装完成后,supervisor 会自动注册为 systemd 服务。
检查一下状态:

sudo systemctl status supervisord

如果显示 active (running) 就说明成功了。
如果没启动,手动启动一下:

sudo systemctl enable supervisord --now

编写第一个进程配置文件

supervisor 的配置文件默认放在 /etc/supervisor/supervisord.conf
但通常我们不直接改主配置,
而是在 /etc/supervisor/conf.d/ 目录下放各个进程的独立配置文件。

假设你要守护一个简单的 Python 脚本 /home/test/myapp.py,它的作用是每隔 5 秒往日志里写一行时间。
我们先创建配置文件:

sudo vim /etc/supervisor/conf.d/myapp.conf

填入以下内容:

[program:myapp]
command=python3 /home/test/myapp.py
directory=/home/test
autostart=true
autorestart=true
startretries=3
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
user=root

关键字段说明:

  • [program:myapp]:这个程序的名字叫 myapp,后面管理时会用到。
  • command:要执行的命令,写完整路径更安全。
  • directory:工作目录。
  • autostart:supervisor 启动时自动拉起该进程。
  • autorestart:进程意外退出时自动重启。
  • startretries:启动失败时重试次数。
  • user:以哪个用户运行,建议和程序所属用户一致,避免权限问题。

写好后保存退出,然后让 supervisor 载入新配置:

sudo supervisorctl reread
sudo supervisorctl update

看到 myapp: availablemyapp: added process group 就说明成功了。

启动与管理进程

载入配置后,进程不会自动启动,还需要手动启动一次:

sudo supervisorctl start myapp

查看所有进程状态:

sudo supervisorctl status

如果显示 myapp RUNNING pid xxxx 就说明已经跑起来了。
你也可以用 stoprestart 来管理。

常用命令速查

  • supervisorctl reread:重新读取配置文件(新增或删除程序时用)
  • supervisorctl update:根据 reread 结果更新进程组
  • supervisorctl status:查看所有进程状态
  • supervisorctl start/stop/restart 程序名:管理单个进程
  • supervisorctl tail -f 程序名:实时查看该进程的 stdout 日志

常见问题与避坑说明

1. 配置文件语法错误导致进程未启动

写错一个冒号或者少写一个等号,reread 可能不报错,但 update 会提示错误。
建议用在线 INI 工具检查格式,或者先手动执行一遍命令确认能跑。

2. 日志文件权限问题

如果日志文件没有写入权限,进程会启动失败。
可以在配置里指定一个已有权限的目录,比如 /tmp/ 或者 目录的所有者设为配置中的 user

3. autorestart 不生效?

检查配置是否写了 autorestart=true,另外如果进程是因为正常退出(比如主动 exit 0)也会被重新拉起来。
如果你希望只有非正常退出时才重启,可以改成 autorestart=unexpected

4. 进程启动后立刻退出导致循环重启

如果你的程序本身有 bug,一启动就退出了,supervisor 会按照 startretries 重试,重试耗尽后该进程会进入 FATAL 状态,不再自动重启。
这时候应该先排查程序日志,而不是改 supervisor。

验证自动重启效果

为了确认 supervisor 确实能守护进程,简单测试一下:

# 先查看当前进程 PID
sudo supervisorctl status myapp
# 手动杀死这个进程
sudo kill -9 <进程PID>
# 等一两秒再查看状态
sudo supervisorctl status myapp

正常会看到进程又被重新拉起,PID 变成新的。
你也可以查看日志文件 /var/log/myapp.out.log,应该能看到重启后的新输出。

如果你正在处理 Linux 进程守护 supervisor 配置,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
掌握了这套基础后,你还可以进一步配置 web 管理界面、设置日志轮转、管理多个进程组等高级玩法。

分享到:
上一篇
Linux流量监控iftop查看异常流量
下一篇
零基础实现服务器异地备份多副本策略
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意