详细版 Supervisor 排查与配置指南
第 1 步:确保 Supervisor 已正确安装
-
检查是否已安装 Supervisor:
使用以下命令查看 Supervisor 是否已安装:which supervisord
如果返回路径(例如
/usr/bin/supervisord
),说明已安装。如果未安装,继续下一步。 -
安装 Supervisor:
- CentOS/RHEL 系列:
yum install epel-release -y yum install supervisor -y
- Ubuntu/Debian 系列:
apt update apt install supervisor -y
- CentOS/RHEL 系列:
-
验证安装版本:
查看 Supervisor 的安装版本:supervisord --version
第 2 步:启动 Supervisor 并验证服务状态
-
启动 supervisord 服务:
如果是手动运行 Supervisor,使用以下命令启动:supervisord -c /etc/supervisord.conf
如果使用
systemd
管理服务,运行:systemctl start supervisord
-
查看 supervisord 状态:
查看 Supervisor 是否正在运行:ps aux | grep supervisord
-
验证服务状态:
使用以下命令检查服务状态:systemctl status supervisord
-
停止可能的重复进程:
如果发现多个 Supervisor 实例运行,停止所有实例:pkill supervisord
第 3 步:检查主配置文件的正确性
-
主配置文件路径:
常见的主配置文件路径为/etc/supervisord.conf
,如果不确定路径,可以运行:find /etc -name "supervisord.conf"
-
关键配置项:
打开/etc/supervisord.conf
,确保以下内容存在:[supervisord] logfile=/var/log/supervisor/supervisord.log ; 主日志文件路径 pidfile=/var/run/supervisord.pid ; PID 文件路径 childlogdir=/var/log/supervisor ; 子程序日志路径 [unix_http_server] file=/var/run/supervisor.sock ; socket 文件路径 chmod=0700 ; 权限设置 [include] files = /etc/supervisord.d/*.conf ; 子配置文件目录及匹配规则
-
测试配置文件语法:
使用以下命令测试主配置文件是否有语法错误:supervisord -n -c /etc/supervisord.conf
如果有语法错误,请根据提示修复。
第 4 步:检查文件与目录的权限
-
检查 Supervisor 的运行目录:
确保以下目录存在并具有适当权限:mkdir -p /var/log/supervisor /var/run chmod -R 755 /var/log/supervisor /var/run
-
检查子配置文件目录:
查看/etc/supervisord.d/
目录下的文件:ls -l /etc/supervisord.d/
确保所有配置文件均可被
root
或运行用户读取。
第 5 步:验证子程序配置文件
-
检查程序配置文件:
打开/etc/supervisord.d/*.conf
文件,确保以下关键参数正确配置:[program:example_program] directory=/path/to/program ; 程序运行目录 command=/path/to/program_binary ; 程序启动命令 autostart=true ; Supervisor 启动时自动运行 autorestart=true ; 异常退出时自动重启 user=root ; 运行用户(可根据需要修改) stdout_logfile=/var/log/supervisor/example.log ; 标准输出日志 stderr_logfile=/var/log/supervisor/example.err ; 标准错误日志
-
验证程序文件是否存在并可执行:
ls -l /path/to/program_binary
如果文件没有执行权限,添加权限:
chmod +x /path/to/program_binary
-
检查日志路径是否存在:
如果配置了日志路径(如/var/log/supervisor/example.log
),确保目录存在:mkdir -p /var/log/supervisor chmod -R 755 /var/log/supervisor
第 6 步:重新加载配置并测试 Supervisor
-
重新加载配置:
supervisorctl reread supervisorctl update
-
查看 Supervisor 管理的程序状态:
supervisorctl status
第 7 步:解决常见问题
-
端口冲突:
如果日志中显示端口被占用,检查默认端口(9001)是否冲突:netstat -tulnp | grep 9001
如果冲突,修改
/etc/supervisord.conf
中[inet_http_server]
的端口:[inet_http_server] port=127.0.0.1:9002
-
权限问题:
如果日志中提示Permission denied
,检查相关目录的权限,确保其对运行用户可读写。 -
配置文件未加载:
如果某些子配置文件未被加载,检查[include]
的文件扩展名规则是否匹配实际文件名。
第 8 步:通过 Systemd 管理 Supervisor
-
创建 Systemd 服务文件:
如果缺少/etc/systemd/system/supervisord.service
文件,可以创建:[Unit] Description=Supervisor process control system After=network.target [Service] ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
-
加载并启用服务:
systemctl daemon-reload systemctl enable supervisord systemctl start supervisord
-
查看服务状态:
systemctl status supervisord
第 9 步:检查日志文件以定位问题
-
Supervisor 主日志文件:
查看/var/log/supervisor/supervisord.log
:tail -f /var/log/supervisor/supervisord.log
-
程序日志文件:
如果配置了stdout_logfile
或stderr_logfile
,检查对应日志文件中的错误信息。
第 10 步:最终验证
- 查看 Supervisor 管理的所有程序:
supervisorctl status
- 如果一切正常,可以重启 Supervisor 服务:
systemctl restart supervisord
此指南全面涵盖了 Supervisor 的安装、配置、权限问题排查、端口冲突解决和日志分析等内容,适用于各种场景。