Rocky Linux 上使用 Supervisord 管理进程

Supervisor 是一个用于管理进程的工具,可以确保进程持续运行,并在崩溃时自动重启。

安装 Supervisord

使用 yum 安装 supervisor:

sudo yum install -y epel-release # 安装 EPEL 源
sudo yum install -y supervisor # 安装 supervisor

sudo systemctl start supervisord # 启动 supervisor
sudo systemctl enable supervisord # 设置开机自启
sudo systemctl status supervisord # 查看 supervisor 状态

配置 Supervisor

supervisor 的配置文件位于 /etc/supervisord.conf,配置如下:

[unix_http_server]
file=/var/run/supervisor/supervisor.sock   ; UNIX socket 文件,supervisorctl 会使用
chmod=0700                                 ; socket 文件的 mode,默认是 0700

[include]
files = supervisord.d/*.ini

添加配置文件

假定 Web 服务器用户为 www-data,Nuxt 应用安装在 /var/www/codes/nuxt 目录,Laravel 应用安装在 /var/www/codes/laravel 目录。
# `/etc/supervisord.d/nuxt.ini`
[program:nuxt]
process_name = %(program_name)s_%(process_num)02d
directory = /var/www/codes/nuxt
environment = NODE_ENV=production,NITRO_PORT=3000,NUXT_PUBLIC_API_HOST=http://localhost:3000
command = /usr/local/bin/node .output/server/index.mjs
autostart = true
autorestart = true
user = www-data
redirect_stderr = true
stderr_logfile = /var/log/supervisor/nuxt.err.log
stdout_logfile = /var/log/supervisor/nuxt.log
stopwaitsecs = 20

创建日志目录

# 创建日志目录
sudo mkdir -p /var/log/supervisor
# 设置目录权限
sudo chown -R www-data:www-data /var/log/supervisor

管理进程

使用 supervisorctl 管理进程。

重新加载配置

重新加载配置后,需要使用下面的命令更新进程。

sudo supervisorctl reread
sudo supervisorctl update

Nuxt 应用管理

sudo supervisorctl start nuxt # 启动 Nuxt

sudo supervisorctl stop nuxt # 停止 Nuxt

sudo supervisorctl restart nuxt # 重启 Nuxt

nuxtprogram:nuxt 的名称。

Laravel 队列管理

sudo supervisorctl start laravel-worker:* # 启动所有队列进程

sudo supervisorctl stop laravel-worker:* # 停止所有队列进程

sudo supervisorctl restart laravel-worker:* # 重启所有队列进程

进程监控

查看状态

使用 supervisorctl 查看进程状态。

sudo supervisorctl status # 查看所有进程状态

# 查看特定进程状态
sudo supervisorctl status nuxt:*
sudo supervisorctl status laravel-worker:*

查看日志

使用 tail -f 实时查看日志。

tail -f /var/log/supervisor/nuxt.log # Nuxt 日志
tail -f /var/log/supervisor/nuxt.err.log # Nuxt 错误日志

tail -f /var/log/supervisor/laravel-worker.log # Laravel 队列日志
tail -f /var/log/supervisor/laravel-worker.err.log # Laravel 队列错误日志

优化配置

优化配置可以提高进程的性能和稳定性。

内存管理

[supervisord]
minfds = 65535
minprocs = 200

进程优先级

[program:nuxt]
priority = 1

[program:laravel-worker]
priority = 2
设置优先级,优先级越小,优先级越高。

故障排查指南

  1. 进程启动失败
    • 检查日志文件
    • 验证目录权限
    • 确认用户权限
  2. 内存问题
    [program:nuxt]
    # 添加内存限制
    environment=NODE_OPTIONS="--max-old-space-size=2048"
    
  3. 队列阻塞
    [program:laravel-worker]
    # 添加超时设置
    command=php artisan queue:work --timeout=60
    

维护建议

  1. 定期检查日志
    • 设置日志轮转
    • 监控错误模式
  2. 性能监控
    • 观察内存使用
    • 跟踪进程重启次数
  3. 备份配置
    • 定期备份 supervisor 配置
    • 记录配置修改

总结

使用 Supervisord 管理 NuxtLaravel 队列进程可以:

  • 确保进程持续运行
  • 自动处理崩溃和重启
  • 提供统一的管理接口
  • 简化维护工作

通过合理配置和监控,可以显著提高应用的可靠性和可维护性。