在CentOS系统运维中,进程管理是保障服务稳定性的关键环节。本文基于用户与助手的对话内容,详细介绍Supervisor进程管理工具的安装、配置及使用方法,帮助系统管理员实现高效的进程监控与自动化管理

1
2
3

 

安装与初始化

安装EPEL仓库

Supervisor通常包含在EPEL仓库中,需先安装EPEL仓库:

bash
复制
# 安装EPEL仓库 sudo yum install epel-release -y # 安装Supervisor sudo yum install supervisor -y

服务启动与状态检查

安装完成后,需启动Supervisor服务并设置开机自启:

bash
复制
# 启动supervisord服务 sudo systemctl start supervisord # 设置开机自启 sudo systemctl enable supervisord # 查看服务状态 sudo systemctl status supervisord

核心配置详解

主配置文件

Supervisor的主配置文件位于/etc/supervisord.conf,包含全局设置和模块配置:

ini
复制
[unix_http_server] file=/var/run/supervisor.sock ; UNIX socket文件路径 chmod=0700 ; socket文件权限 [inet_http_server] ; 启用HTTP服务器(可选) port=0.0.0.0:9001 ; 监听的IP和端口 username=admin ; 登录用户名 password=123456 ; 登录密码 [supervisord] logfile=/var/log/supervisord.log ; 日志文件路径 logfile_maxbytes=50MB ; 日志文件大小 logfile_backups=10 ; 日志备份数量 pidfile=/var/run/supervisord.pid ; PID文件路径 [include] files = /etc/supervisor.d/*.conf ; 包含其他配置文件

应用程序配置

为每个应用程序创建单独的配置文件,通常放在/etc/supervisor.d/目录下。以下是一个示例应用程序配置:

ini
复制
[program:api] command=/usr/bin/python /path/to/your/api.py ; 启动命令 directory=/path/to/your/api ; 工作目录 user=root ; 运行用户 autostart=true ; 随supervisord启动 autorestart=true ; 自动重启 startsecs=10 ; 启动10秒后无异常视为启动成功 stderr_logfile=/var/log/api.err.log ; 错误日志路径 stdout_logfile=/var/log/api.out.log ; 输出日志路径 environment=HOME="/path/to/your/api",PATH="/usr/local/bin:%(ENV_PATH)s" ; 环境变量

配置管理与操作

应用配置更改

在添加或修改配置文件后,需重新读取并应用配置:

bash
复制
# 重新读取配置文件 sudo supervisorctl reread # 应用配置更改并重启受影响的程序 sudo supervisorctl update

使用Supervisorctl管理程序

Supervisorctl是Supervisor的命令行工具,用于管理配置的进程:

bash
复制
# 查看所有程序状态 sudo supervisorctl status # 启动特定程序 sudo supervisorctl start api # 停止特定程序 sudo supervisorctl stop api # 重启特定程序 sudo supervisorctl restart api

访问Web界面(可选)

如果配置了HTTP服务器,可以通过浏览器访问Supervisor的Web界面来管理进程:

http://<your-server-ip>:9001

使用配置的用户名和密码登录即可。

常见问题解决

进程启动后立即退出

如果进程启动后立即退出并显示BACKOFF状态,可能的原因包括:

  • 进程依赖的服务未启动
  • 进程配置的用户权限不足
  • 进程需要的环境变量未设置

解决方法:检查进程日志,确保所有依赖服务已启动,并为进程配置正确的用户和环境变量。

Web界面无法访问

如果无法访问Web界面,可能的原因包括:

  • inet_http_server配置不正确
  • 服务器防火墙阻止了9001端口
  • Supervisor未重启

解决方法:检查配置文件中的inet_http_server部分,确保端口未被占用,并开放相应的防火墙端口。