Windows系统下运行Laravel的php artisan queue:work的更优方案有哪些?
Windows 环境下运行 Laravel
queue:work 的更优方案 你当前使用的开机启动批处理方案可以满足基础运行需求,但存在进程异常退出后无法自动重启、无日志留存排查困难、前台运行占用命令行窗口等不足,以下是两种更优的实现方式:
方案1:优化现有批处理(适合开发/测试环境)
不需要额外安装工具,仅修改现有脚本即可提升稳定性:
- 给队列命令添加运行参数,避免异常场景导致的资源占用:
命令示例:php artisan queue:work --tries=3 --timeout=60 --sleep=3
参数说明:--tries限制单任务最大重试次数避免死循环,--timeout限制单任务最长执行时间,--sleep定义空队列时的休眠间隔降低CPU占用 - 给批处理添加异常自动重启逻辑,修改批处理内容如下:
@echo off :: 替换为你的Laravel项目根目录绝对路径 cd /d "D:\www\your-laravel-project" :loop php artisan queue:work --tries=3 --timeout=60 --sleep=3 echo 队列进程意外退出,10秒后自动重启... timeout /t 10 /nobreak > nul goto loop - 如果需要后台隐藏运行不弹出黑框,可额外编写VBS脚本调用批处理,将VBS文件放入开机启动项即可,VBS脚本内容如下:
Set WshShell = CreateObject("WScript.Shell") :: 替换为你的批处理文件绝对路径 WshShell.Run chr(34) & "D:\scripts\start-queue.bat" & Chr(34), 0 Set WshShell = Nothing
方案2:封装为Windows系统服务(生产环境首选)
借助工具NSSM(Non-Sucking Service Manager)将队列进程封装为系统服务,稳定性远高于开机启动项,支持系统登录前自动启动、异常自动重启、统一在服务管理器管理状态等能力:
- 下载NSSM后放入任意可访问的本地目录
- 以管理员身份启动命令提示符,执行
nssm install LaravelQueueService调出服务配置窗口 - 在Application标签页填写配置:
- Path:选择WAMP集成环境中php.exe的绝对路径,示例:
C:\wamp64\bin\php\php8.2.0\php.exe - Arguments:填写队列运行命令,示例:
artisan queue:work --tries=3 --timeout=60 --sleep=3 - Working directory:填写Laravel项目根目录的绝对路径
- Path:选择WAMP集成环境中php.exe的绝对路径,示例:
- 切换到Recovery标签,将三次失败响应都设置为「重启服务」,重启延迟设置为10000毫秒
- 保存配置后,在Windows服务管理器中找到
LaravelQueueService,设置启动类型为自动,启动服务即可
注意:无论使用哪种运行方案,每次修改队列相关代码、更新.env配置后,都需要执行
php artisan queue:restart重启队列进程,新的配置和代码才会生效。
内容的提问来源于stack exchange,提问作者yecademy
相关产品推荐
相关产品推荐

