Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
发布时间 - 2025-12-30 00:00:00 点击率:次Laravel定时任务需由系统Cron每分钟调用php artisan schedule:run来触发调度器判断执行时机;command()执行已注册命令,call()直接调用闭包但绕过异常处理;队列任务需单独运行queue:work进程。
Laravel 的定时任务不是靠 Cron 直接调用 PHP 脚本,而是靠一个固定运行的 artisan schedule:run 命令来触发调度器判断是否该执行——这点不搞清,所有配置都会失效。
为什么 php artisan schedule:run 必须由系统 Cron 每分钟执行一次
因为 Laravel 的 Schedule 类本身不监听时间,它只在 schedule:run 被调用时检查当前时间是否匹配你定义的 ->everyMinute()、->daily() 等规则。没有外部轮询,调度器就是个“哑巴”。
常见错误现象:
- 在本地用
php artisan schedule:run手动跑一次能成功,但之后再也不执行 - 加了
->dailyAt('09:00')却总在凌晨 00:00 执行(其实是没配 Cron,手动运行时碰巧时间满足)
正确做法:
- Linux 下编辑 root 或项目用户 crontab:
* * * * * cd /var/www/myapp && php artisan schedule:run >> /dev/null 2>&1
- 确保路径是绝对路径(
cd /var/www/myapp),不能用~/myapp - PHP 必须是 CLI 版本(检查
which php,避免 Web SAPI 的 php-fpm 路径混入)
$schedule->command() 和 $schedule->call() 的本质区别
前者执行一个已注册的 Artisan 命令(必须继承 Illuminate\Console\Command),后者直接调用闭包或静态方法,适合简单逻辑但无法使用命令行参数、选项或输出重定向。
使用场景对比:
- 用
command('backup:database'):适合需复用、带参数(如--f)、要记录日志或支持队列的任务
orce - 用
call(function () { ... }):仅用于调试或极轻量操作(比如写一行日志),上线环境应避免——它绕过命令生命周期,不触发handle()外的事件、中间件、异常处理器
注意:call() 中抛出的异常不会被 Laravel 的命令异常处理器捕获,可能静默失败。
如何让定时任务真正跑在队列里(而不是同步阻塞主线程)
Laravel 调度器默认同步执行任务。即使你在 command() 里用了 dispatch(new SomeJob),那个 Job 仍是在 schedule:run 进程中 dispatch 的——如果队列驱动是 sync,它立刻执行;如果是 redis 或 database,它只是写入队列表,但没人消费。
关键点:
- 必须单独运行队列监听器:
php artisan queue:work --daemon
(Laravel ≤ 8)或php artisan queue:work
(Laravel ≥ 9,默认已 daemon 化) - 这个
queue:work进程和schedule:run是两个独立进程,互不依赖 - 不要在
schedule里写$schedule->job(new MyJob)->daily()——这是无效写法,job()方法只在 Laravel 5.5–5.7 存在且已被移除
开发环境验证调度逻辑是否生效的最快方式
别等 Cron 分钟级触发,也别改系统时间。直接用 schedule:run 加 --pretend 参数看它“打算”运行什么:
php artisan schedule:run --pretend
输出类似:
Running scheduled command: "/usr/bin/php" "artisan" "inspire" >> "/var/www/myapp/storage/logs/cron.log" 2>&1
说明规则已加载、时间判断逻辑正常。再配合 --verbose 可看到跳过原因(比如 “Not due yet” 或 “Disabled by environment”)。
容易被忽略的坑:
-
APP_ENV=local时,schedule:run默认不执行任何任务(除非你显式调用->when(true)),这是 Laravel 内置保护机制 -
php artisan config:clear后忘记config:cache,会导致App\Console\Kernel.php中的schedule()方法未被加载 - 任务类里用了
Log::info()却没看到日志?检查storage/logs/权限,或确认日志通道是否配置为daily导致当天日志文件名含日期
# php
# linux
# laravel
# redis
# 处理器
# app
# ai
# 区别
# 开发环境
# 为什么
# red
# 中间件
# 命令行参数
# 继承
# 线程
# 主线程
# var
# 闭包
# console
# function
# 事件
# database
# 这是
# 用了
# 直接调用
# 只在
# 每分钟
# 加载
# 是个
# 是在
# 你在
# 已被
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251811 】
【
AI营销90571 】
相关推荐:
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
如何在宝塔面板中创建新站点?
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
js代码实现下拉菜单【推荐】
如何在橙子建站中快速调整背景颜色?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Android okhttputils现在进度显示实例代码
Python函数文档自动校验_规范解析【教程】
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
C语言设计一个闪闪的圣诞树
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
JavaScript如何实现类型判断_typeof和instanceof有什么区别
Laravel如何与Inertia.js和Vue/React构建现代单页应用
高端建站三要素:定制模板、企业官网与响应式设计优化
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
活动邀请函制作网站有哪些,活动邀请函文案?
Laravel如何使用Blade组件和插槽?(Component代码示例)
微信小程序 五星评分(包括半颗星评分)实例代码
如何在IIS中新建站点并配置端口与物理路径?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Swift开发中switch语句值绑定模式
EditPlus中的正则表达式实战(6)
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
PHP 500报错的快速解决方法
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Laravel Session怎么存储_Laravel Session驱动配置详解
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
如何在不使用负向后查找的情况下匹配特定条件前的换行符
如何在自有机房高效搭建专业网站?
如何快速搭建高效简练网站?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
C++用Dijkstra(迪杰斯特拉)算法求最短路径
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
如何续费美橙建站之星域名及服务?
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Laravel如何实现API版本控制_Laravel版本化API设计方案
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南


orce