Skip to content

Supervisor配置

Supervisor 是 Linux 下最常用的进程管理工具之一,适合管理 Python、Java、Go、Node.js 等长期运行的服务。


一、安装 Supervisor

方法一:使用 pip 安装(推荐)

bash
python3.14 -m pip install supervisor

验证:

bash
supervisord --version

例如:

text
4.2.5

查看安装位置:

bash
which supervisord
which supervisorctl

例如:

text
/usr/local/python3.14/bin/supervisord
/usr/local/python3.14/bin/supervisorctl

建议把 Python 的 bin 目录加入 PATH

bash
echo 'export PATH=/usr/local/python3.14/bin:$PATH' >/etc/profile.d/python314.sh
source /etc/profile

二、创建 Supervisor 配置

创建配置目录:

bash
mkdir -p /etc/supervisor/conf.d
mkdir -p /var/log/supervisor

生成默认配置:

bash
echo_supervisord_conf >/etc/supervisord.conf

编辑:

bash
vim /etc/supervisord.conf

修改最后一部分:

ini
[include]
files = /etc/supervisor/conf.d/*.conf

三、启动 Supervisor

启动:

bash
supervisord -c /etc/supervisord.conf

查看状态:

bash
supervisorctl status

如果输出:

text

说明 Supervisor 已正常启动,只是还没有管理任何程序。


四、配置一个 Python 项目

例如你的项目:

text
/opt/python/image-ai/ai_service

虚拟环境:

text
/opt/python/image-ai/ai_service/venv

启动命令:

bash
python app.py

创建:

bash
vim /etc/supervisor/conf.d/image-ai.conf

内容:

ini
[program:image-ai]

directory=/opt/python/image-ai/ai_service

command=/opt/python/image-ai/ai_service/venv/bin/python app.py

user=root

autostart=true
autorestart=true

startsecs=5

stdout_logfile=/var/log/supervisor/image-ai.log
stderr_logfile=/var/log/supervisor/image-ai.err

redirect_stderr=false

stopasgroup=true
killasgroup=true

如果是 FastAPI:

ini
command=/opt/python/image-ai/ai_service/venv/bin/uvicorn app:app --host 0.0.0.0 --port 8000

如果是 Django:

ini
command=/opt/python/image-ai/ai_service/venv/bin/gunicorn project.wsgi:application

五、重新加载配置

bash
supervisorctl reread

输出:

text
image-ai: available

更新:

bash
supervisorctl update

启动:

bash
supervisorctl start image-ai

查看:

bash
supervisorctl status

例如:

text
image-ai   RUNNING

六、常用命令

查看状态:

bash
supervisorctl status

启动:

bash
supervisorctl start image-ai

停止:

bash
supervisorctl stop image-ai

重启:

bash
supervisorctl restart image-ai

全部重启:

bash
supervisorctl restart all

重新读取配置:

bash
supervisorctl reread
supervisorctl update

七、日志查看

查看运行日志:

bash
tail -f /var/log/supervisor/image-ai.log

查看错误日志:

bash
tail -f /var/log/supervisor/image-ai.err

或者:

bash
supervisorctl tail image-ai

实时查看:

bash
supervisorctl tail -f image-ai

八、设置开机自启动(推荐)

如果你是通过 pip 安装的 Supervisor,可以为它创建一个 systemd 服务。

创建:

bash
vim /etc/systemd/system/supervisord.service

内容:

ini
[Unit]
Description=Supervisor Process Control System
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/python3.14/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/local/python3.14/bin/supervisorctl -c /etc/supervisord.conf shutdown
ExecReload=/usr/local/python3.14/bin/supervisorctl -c /etc/supervisord.conf reload
PIDFile=/tmp/supervisord.pid
Restart=on-failure

[Install]
WantedBy=multi-user.target

然后执行:

bash
systemctl daemon-reload
systemctl enable supervisord
systemctl start supervisord

检查状态:

bash
systemctl status supervisord

推荐的目录结构

text
/etc/
├── supervisord.conf
├── supervisor/
│   └── conf.d/
│       ├── image-ai.conf
│       ├── api.conf
│       └── celery.conf

/var/log/supervisor/
├── image-ai.log
├── image-ai.err
├── api.log
└── celery.log

这种组织方式便于后续增加多个项目,每个项目一个独立的 .conf 文件,同时由一个 supervisord 实例统一管理。

学而不思则罔,思而不学则殆。