Laravel Octane队列未检测到数据库连接IP变更问题求助
解决Laravel Octane队列任务仍使用旧数据库IP的问题
以下是针对你的场景(Laravel ^11.0 + Octane ^2.2 + FrankenPHP + RabbitMQ)的具体解决方案:
重启Supervisor管理的队列工作进程
Supervisor托管的队列进程是常驻内存的,启动时会一次性加载环境配置,修改数据库IP后不会自动重新读取。执行以下操作:- 用
supervisorctl status查看你的队列进程名称(比如laravel-worker) - 执行重启命令:
supervisorctl restart laravel-worker:*
- 用
重启Octane服务(若用Octane运行队列)
如果你是通过Octane启动队列进程(而非单独的queue:work),Octane的常驻进程会缓存初始配置,需要重启Octane:php artisan octane:stop php artisan octane:start --server=frankenphp --workers=4 --queue=default注意:根据你的实际启动参数调整
--workers和--queue的值。清除配置缓存
若之前执行过config:cache生成了配置缓存文件,队列进程会读取缓存的静态配置而非最新的.env。执行命令清除缓存:php artisan config:clear清除后务必重启队列进程,确保新配置生效。
检查Supervisor配置是否硬编码旧IP
打开Supervisor的队列配置文件(通常路径为/etc/supervisor/conf.d/laravel-worker.conf),检查是否存在硬编码的数据库环境变量,比如:environment=DB_HOST=192.168.1.100若有,将IP修改为新地址,然后重启Supervisor服务:
systemctl restart supervisor验证队列进程的环境变量
确认队列进程是否加载了新的数据库IP:- 查找队列进程PID:
ps aux | grep queue:work - 查看进程环境变量:
cat /proc/[PID]/environ | tr '\0' '\n' | grep DB_HOST
若输出仍为旧IP,说明进程未正确重启或配置未更新,重复上述步骤排查。
- 查找队列进程PID:
内容的提问来源于stack exchange,提问作者ikhsan kurniawan
相关产品推荐
相关产品推荐

