# Supervisor 在 Rocky Linux 上的安装与使用指南

Supervisor 是一个用 Python 编写的进程控制系统，允许用户监控和控制类 UNIX 系统上的多个进程。下面是在 Rocky Linux 上安装和配置 Supervisor 的完整指南。

## 一、安装 Supervisor

### 1. 安装 EPEL 仓库（如果尚未安装）

```bash
sudo dnf install epel-release
sudo dnf update
```

### 2. 安装 Supervisor

```bash
sudo dnf install supervisor
```

### 3. 启动并设置开机自启

```bash
sudo systemctl enable supervisord
sudo systemctl start supervisord
```

### 4. 验证安装

```bash
sudo supervisorctl status
```

## 二、基本配置

### 1. 主配置文件位置
主配置文件位于 `/etc/supervisord.conf`

### 2. 包含自定义配置
默认配置会包含 `/etc/supervisord.d/` 目录下的所有 `.ini` 文件：

```ini
[include]
files = /etc/supervisord.d/*.ini
```

## 三、配置管理进程

### 1. 创建自定义进程配置

在 `/etc/supervisord.d/` 中创建新的配置文件，例如 `myapp.ini`：

```ini
[program:myapp]
command=/usr/bin/python3 /path/to/your/app.py
directory=/path/to/your/app
user=yourusername
autostart=true
autorestart=true
startretries=3
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
environment=PYTHONPATH="/path/to/your/app"
```

### 2. 常用配置选项

| 选项 | 说明 |
|------|------|
| `command` | 要执行的命令 |
| `directory` | 运行命令前切换到的目录 |
| `user` | 运行进程的用户 |
| `autostart` | 是否随 Supervisor 启动而自动启动 |
| `autorestart` | 是否自动重启 (true/false/unexpected) |
| `startretries` | 启动失败后的重试次数 |
| `stderr_logfile` | 标准错误日志文件 |
| `stdout_logfile` | 标准输出日志文件 |
| `environment` | 设置环境变量 |

## 四、Supervisor 命令使用

### 1. 重新加载配置

```bash
sudo supervisorctl reread
sudo supervisorctl update
```

### 2. 管理进程

```bash
# 启动进程
sudo supervisorctl start myapp

# 停止进程
sudo supervisorctl stop myapp

# 重启进程
sudo supervisorctl restart myapp

# 查看所有进程状态
sudo supervisorctl status

# 查看特定进程状态
sudo supervisorctl status myapp
```

### 3. 查看日志

```bash
# 查看主日志
sudo tail -f /var/log/supervisor/supervisord.log

# 查看应用日志
sudo tail -f /var/log/myapp.out.log
```

## 五、Web 界面（可选）

### 1. 启用 Web 界面

编辑 `/etc/supervisord.conf`，取消注释或添加以下内容：

```ini
[inet_http_server]
port=*:9001
username=admin
password=yourpassword
```

### 2. 重启 Supervisor

```bash
sudo systemctl restart supervisord
```

### 3. 访问 Web 界面
通过浏览器访问 `http://your-server-ip:9001`

## 六、高级配置

### 1. 进程组管理

```ini
[group:mygroup]
programs=myapp1,myapp2
priority=999
```

### 2. 事件监听

```ini
[eventlistener:memmon]
command=memmon -p myapp=200MB
events=TICK_60
```

### 3. 日志轮转

安装 `logrotate` 并创建 `/etc/logrotate.d/supervisor`：

```
/var/log/supervisor/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 root root
    postrotate
        /usr/bin/supervisorctl pid > /dev/null && /usr/bin/supervisorctl reopen_logs
    endscript
}
```

## 七、故障排除

### 1. 常见问题解决

- **配置更改不生效**：
  ```bash
  sudo supervisorctl reread
  sudo supervisorctl update
  ```

- **进程无法启动**：
  检查 `/var/log/supervisor/supervisord.log` 和应用的错误日志

- **权限问题**：
  确保配置中指定的用户有执行命令和写入日志的权限

### 2. 日志位置

- 主日志：`/var/log/supervisor/supervisord.log`
- 子进程日志：在各自配置中指定的位置

## 八、安全注意事项

1. 不要以 root 用户运行应用程序
2. Web 界面应设置强密码
3. 考虑限制 Web 界面的访问 IP
4. 定期检查日志文件
5. 保持 Supervisor 更新到最新版本

通过以上步骤，您可以在 Rocky Linux 上成功安装和配置 Supervisor，实现对关键进程的有效管理和监控。