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
添加配置文件
TIP
假定 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
# `/etc/supervisord.d/laravel-worker.ini`
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
directory=/var/www/codes/laravel
command=/usr/local/bin/php artisan queue:work --quiet --sleep=3 --tries=3 --timeout=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=1
redirect_stderr=true
stderr_logfile=/var/log/supervisor/laravel-worker.err.log
stdout_logfile=/var/log/supervisor/laravel-worker.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
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
TIP
设置优先级,优先级越小,优先级越高。
故障排查指南
-
进程启动失败
- 检查日志文件
- 验证目录权限
- 确认用户权限
-
内存问题
[program:nuxt]
# 添加内存限制
environment=NODE_OPTIONS="--max-old-space-size=2048"
- 队列阻塞
[program:laravel-worker]
# 添加超时设置
command=php artisan queue:work --timeout=60
维护建议
-
定期检查日志
- 设置日志轮转
- 监控错误模式
-
性能监控
- 观察内存使用
- 跟踪进程重启次数
-
备份配置
- 定期备份 supervisor 配置
- 记录配置修改
总结
使用 Supervisord
管理 Nuxt
和 Laravel
队列进程可以:
- 确保进程持续运行
- 自动处理崩溃和重启
- 提供统一的管理接口
- 简化维护工作
通过合理配置和监控,可以显著提高应用的可靠性和可维护性。