Supervisor 是 Fresns 在生产环境中运行队列的标准方案
参考资料
Supervisor 是 Fresns 在生产环境中运行队列的标准方案
Supervisor 是 Fresns 在生产环境中运行队列的标准方案。它本质上是一个进程监控器,负责确保 php artisan queue:work 进程一直存活,如果意外退出会自动拉起。
📦 安装 Supervisor
Fresns 官方文档明确要求:只要修改了队列连接方式(如改为 redis),就必须配置 Supervisor。
宝塔面板安装(推荐)
登录宝塔面板,进入「软件商店」
搜索「Supervisor 进程守护管理器」
点击安装,等待状态显示「正在运行」
命令行安装(通用 Linux)
sudo apt-get install supervisor # Debian/Ubuntu sudo yum install supervisor # CentOS/RHEL
⚙️ 配置队列进程
宝塔面板配置
进入「Supervisor 进程守护管理器」→「添加守护进程」,填写:
| 配置项 | 填写内容 |
|---|---|
| 进程名称 | fresns-queue |
| 启动用户 | www(必须与网站所有者一致,避免日志权限问题) |
| 运行目录 | /www/wwwroot/你的Fresns路径 |
| 启动命令 | php artisan queue:work redis --queue=fresns --sleep=3 --tries=3 |
| 自动启动 | 勾选 |
| 异常重启 | 勾选 |
命令行配置(备用)
创建 /etc/supervisor/conf.d/fresns-worker.conf:
[program:fresns-worker] process_name=%(program_name)s_%(process_num)02d command=php /www/wwwroot/fresns/artisan queue:work redis --queue=fresns --sleep=3 --tries=3 autostart=true autorestart=true user=www numprocs=1 redirect_stderr=true stdout_logfile=/www/wwwroot/fresns/storage/logs/worker.log
numprocs=1 表示启动 1 个 worker 进程。如果队列任务积压严重,可以增大这个数字来并行处理。
🔄 应用配置
宝塔面板:添加后自动生效,在进程列表中查看状态是否为 RUNNING。
命令行:
sudo supervisorctl reread # 重新读取配置 sudo supervisorctl update # 应用新配置 sudo supervisorctl start fresns-worker:* # 启动进程
💡 关键注意事项
启动命令中的参数
redis:与.env中QUEUE_CONNECTION=redis对应--queue=fresns:与.env中REDIS_QUEUE=fresns一致--tries=3:任务失败最多重试 3 次--sleep=3:队列为空时休眠 3 秒再检查
Fresns 队列的 PHP 函数依赖
使用 Redis 异步队列时,服务器必须保留 pcntl_signal、pcntl_alarm、pcntl_async_signals 三个函数,否则队列进程无法正常运作。
插件升级后重启队列
插件升级后,必须重启 Supervisor 中的队列进程,否则新代码不会生效。在宝塔中点击「重启」,或执行:
php artisan queue:restart
多站点隔离
同一服务器运行多个 Fresns 实例时,必须修改各自的 REDIS_QUEUE 名称或 REDIS_DB 索引,避免队列数据混淆。
时间:2026-10-01 17:05:35
来源:https://fresns.ciilii.com/
