Laravel 6中schedule:list等命令不存在及调度不自动执行问题
Laravel 6 调度命令报错及自动执行问题解决方案
1. "schedule:work" / "schedule:list" 命令不存在的问题
Laravel 6 原生未提供schedule:work和schedule:list两个Artisan命令,这两个命令是Laravel 8.0及以上版本才新增的内置功能,低版本运行时报错属于正常现象,不是代码或环境故障。
2. 任务调度无法自动执行的问题
php artisan schedule:run本身是单次触发命令,仅会执行当前时间符合调度规则的任务,没有常驻后台轮询的能力。要实现自动触发,需要配置系统定时任务周期性调用该命令:
Linux/macOS 环境配置
- 执行
crontab -e编辑当前用户的定时任务列表 - 新增如下规则,将
/path-to-your-project替换为项目根目录的绝对路径:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
- 保存退出后定时规则自动生效,该规则会每分钟调用一次
schedule:run,自动匹配触发符合规则的任务。
Windows 环境配置
打开系统「任务计划程序」,新建任务:
- 触发器设置为每分钟执行一次,持续时间选择「无限期」
- 操作设置为「启动程序」,程序选择本地php.exe的绝对路径,参数填写
artisan schedule:run,起始位置填写项目根目录的绝对路径 - 保存后任务即可生效
可选:Laravel 6 实现高版本调度命令的替代方案
如果需要使用schedule:list查看任务列表、schedule:work在开发环境常驻运行,可以使用以下替代方案:
- 查看调度列表:安装适配Laravel 6的第三方扩展
hmazter/laravel-schedule-list,安装命令:composer require hmazter/laravel-schedule-list "^1.2"
安装完成后执行php artisan schedule:list即可查看所有已定义的调度任务。 - 开发环境模拟常驻运行:在项目根目录执行以下shell命令即可实现每分钟轮询执行调度,和高版本
schedule:work效果一致:while true; do php artisan schedule:run; sleep 60; done
内容的提问来源于stack exchange,提问作者Kowshik Sarker
相关产品推荐
相关产品推荐

