Supervisor 详细用法
一、Supervisor 是什么
Supervisor = Linux 进程守护 / 自动重启 / 日志管理工具
适合:
后台服务
队列 worker
常驻脚本
PHP / Python / Node 进程
二、安装 Supervisor
Ubuntu / Debian
sudo apt update
sudo apt install supervisor
CentOS / RHEL
sudo yum install supervisor
sudo systemctl enable supervisord
sudo systemctl start supervisord
三、核心目录结构
| 路径 | 作用 |
|---|---|
/etc/supervisor/supervisord.conf | 主配置 |
/etc/supervisor/conf.d/*.conf | 子程序配置(重点) |
/var/log/supervisor/ | Supervisor 日志 |
四、Supervisor 基本命令
supervisorctl status # 查看所有进程
supervisorctl start all # 启动全部
supervisorctl stop all # 停止全部
supervisorctl restart all # 重启全部
单个程序
supervisorctl start queue-worker
supervisorctl restart queue-worker
五、最重要:程序配置详解
一个完整示例(Laravel 队列)
/etc/supervisor/conf.d/laravel-queue.conf
[program:laravel-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/app/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
numprocs=2
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/supervisor/queue.log
stopwaitsecs=3600
六、配置项逐条解释
| 配置 | 含义 |
|---|---|
program:name | 程序名 |
command | 启动命令 |
autostart | supervisor 启动时自动运行 |
autorestart | 进程退出自动重启 |
numprocs | 启动进程数量 |
user | 运行用户 |
stdout_logfile | 输出日志 |
stopwaitsecs | 停止等待时间 |
七、更新配置流程
supervisorctl reread # 读取新配置
supervisorctl update # 应用变更
改完 conf 不做这步 = 配置没生效
八、日志管理
查看日志
tail -f /var/log/supervisor/queue.log
按进程区分
stdout_logfile=/var/log/supervisor/%(program_name)s.log
日志轮转
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
九、Laravel 队列最佳实践
推荐命令(Laravel 5.x / 6.x)
command=php artisan queue:work redis --sleep=3 --tries=3 --timeout=90
️ 不推荐:
queue:listen # 慢 + 不稳定
十、常见问题 & 排错
进程不停重启?
supervisorctl tail -f laravel-queue
常见原因:
路径错误
PHP 不在 PATH
权限问题
unix:///run/supervisor/supervisor.sock no such file
检查
ps aux | grep supervisord
如果 没有 supervisord 进程 就是这个原因。
解决
# systemd 系统
sudo systemctl start supervisord
sudo systemctl enable supervisord
再试:
supervisorctl status