You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Laravel的queue:work在Windows任务计划程序中持续运行(队列为空时不停止)

解决Windows下Laravel Queue Worker空队列时停止运行的问题

针对你的场景,要让php artisan queue:work持续运行不退出,可以从调整Worker命令参数和优化Windows任务计划配置两方面入手,以下是具体方案:

一、修正Laravel Queue Worker命令

你之前使用的--daemon参数在Laravel 5.7+版本已被废弃(默认queue:work就是守护模式),且未指定空队列时的休眠策略,导致Worker处理完任务后直接退出。请改用以下命令:

php artisan queue:work database --sleep=3 --tries=3 --timeout=60

参数说明:

  • database:指定使用你的默认数据库队列驱动(可根据实际调整)
  • --sleep=3:队列为空时,Worker休眠3秒后再次检查队列,避免直接退出
  • --tries=3:每个任务最多尝试3次(失败后进入失败队列)
  • --timeout=60:单个任务的最长执行时间(防止任务卡死)

二、优化Windows任务计划配置

确保任务计划能在Worker意外退出时自动重启,同时保证启动参数正确:

  1. 创建/编辑任务

    • 程序或脚本:填写PHP的完整路径(例如C:\PHP7.2\php.exe)
    • 添加参数:填写artisan queue:work database --sleep=3 --tries=3 --timeout=60
    • 起始于:填写你的Laravel项目根目录(例如C:\Projects\YourLaravelApp)
  2. 调整任务设置

    • 切换到「设置」标签页:
      • 勾选「如果任务失败,每隔5分钟重试,最多重试3次」(可根据需求调整间隔和次数)
      • 勾选「如果任务已经在运行,不要启动新实例」
      • 勾选「允许任务按需运行」
      • 确保「如果任务运行时间超过X小时,停止任务」的选项不勾选(或设置足够长的时间)
  3. 触发器配置

    • 保持「开机启动」的触发器,同时可添加「登录时」的触发器(确保用户登录后也能启动)
    • 触发器的「重复任务间隔」无需设置(Worker本身会持续运行),只需设置任务启动一次即可

三、备选方案:用批处理脚本循环重启Worker

如果上述配置仍有问题,可以写一个批处理脚本强制循环启动Worker:

创建queue-worker.bat文件,内容如下:

@echo off
title Laravel Queue Worker
:loop
cd /d "C:\Projects\YourLaravelApp"
php artisan queue:work database --sleep=3 --tries=3 --timeout=60
echo Worker exited, restarting in 5 seconds...
timeout /t 5 /nobreak > nul
goto loop

然后在Windows任务计划中设置启动这个批处理脚本,这样即使Worker意外退出,脚本会自动重启它。

注意事项

  • 确保任务计划的运行用户拥有Laravel项目目录和PHP.exe的读写/执行权限,建议用管理员权限运行任务
  • 定期查看Laravel的storage/logs/laravel.log,排查Worker是否有异常退出的错误信息
  • 若使用Laravel Horizon(适合Laravel 5.8+),可以更方便地管理队列Worker,但需要Redis支持

内容的提问来源于stack exchange,提问作者Stevani Putri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:35:03