用系统包管理器安装Supervisor最稳妥,自动注册systemd服务并适配路径;需修正sock/log/pid三处路径,子配置中command须用绝对路径、user需有对应权限,配置更新后应执行supervisorctl reread与update而非systemctl restart。

直接用系统包管理器安装最稳妥,避免路径权限混乱和启动失败;pip安装容易缺 systemd 服务文件,生产环境慎选。
用 apt/yum/dnf 安装并启用 systemd 服务
包管理器安装会自动注册 systemd 服务、生成基础配置,并适配系统默认路径,省去大量手动调整。
- Ubuntu/Debian:
sudo apt update && sudo apt install supervisor,安装后systemctl status supervisord应显示 active (running) - CentOS/RHEL 7+:
sudo yum install -y epel-release && sudo yum install -y supervisor(或dnf),再执行sudo systemctl enable --now supervisord - 安装后别急着改配置——先确认服务已跑起来:
ps aux | grep supervisord能看到进程,supervisorctl status返回 “No processes available” 是正常现象
主配置文件必须修正的三处路径
默认配置常把 sock、log、pid 写在 /tmp 或用户家目录,导致重启后失效或权限拒绝。必须手动编辑 /etc/supervisor/supervisord.conf:
-
[unix_http_server]段中:把file改为/var/run/supervisor.sock(注意目录需存在且supervisord进程有写入权限) -
[supervisord]段中:logfile设为/var/log/supervisord.log,pidfile设为/var/run/supervisord.pid -
[supervisorctl]段中:serverurl必须与上面unix_http_server.file值一致,即unix:///var/run/supervisor.sock - 末尾追加
[include]段:files = /etc/supervisor/conf.d/*.conf,然后sudo mkdir -p /etc/supervisor/conf.d
子配置里 command 和 user 是高频报错点
90% 的“程序不启动”或“启动后秒退”问题出在这两项——不是语法错,而是运行时环境缺失。
-
command必须是**绝对路径 + 完整解释器**,例如python3 /opt/myapp/main.py,不能写python main.py(PATH 不一定包含python3) -
user推荐非 root,但该用户必须对command所在目录、日志路径、虚拟环境有读/执行/写权限;若用venv,务必把PATH加进environment,例如:environment=PATH="/opt/myapp/venv/bin:/usr/local/bin:/usr/bin" - 日志路径对应目录需提前创建:
sudo mkdir -p /var/log/myapp,否则supervisord启动时静默失败 -
autorestart=unexpected比true更安全——进程正常退出(如收到 SIGTERM)不会无限重启
配置更新后必须 reload,不是 restart
supervisord 进程本身不响应配置热更新,但 supervisorctl 可以触发重载逻辑,这是关键操作习惯。
- 新增或修改了
/etc/supervisor/conf.d/*.conf文件后,执行:sudo supervisorctl reread(扫描新配置)→sudo supervisorctl update(应用变更) - 不要用
systemctl restart supervisord,它会中断所有托管进程;只有主配置(/etc/supervisor/supervisord.conf)改动才需要systemctl restart - 验证是否生效:
sudo supervisorctl status看程序状态,sudo supervisorctl tail -f myapp stdout实时看输出日志
最容易被忽略的是 directory 和 environment 的组合效应:当前工作目录不对,Python 就找不到模块;PATH 缺失,连 pip 都调不到。建议所有子配置都显式声明这两项,哪怕值看起来“冗余”。


















