laravel12 任务调度的使用方法详细版
xuexi 2026-01-23 15:21:23 发表在:PHP 查看数:22

创建定时任务(和旧版本一致,无变化)

执行 Artisan 命令生成任务类,逻辑写在 handle() 方法中:

# 生成命令(示例:DemoCron,可自定义名称)
php artisan make:command DemoCron --command=demo:cron

生成文件路径:app/Console/Commands/DemoCron.php,示例逻辑(写入日志,测试用,并不是一定就在当前路径,但是框架规范就是在这个路径下,所以我理解就这个是最合理的):

namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;

class DemoCron extends Command
{
    protected $signature = 'demo:cron'; // 命令标识
    protected $description = 'Laravel 12 定时任务示例';

    public function handle()
    {
        // 自定义逻辑(如日志、数据处理、消息发送等)
        Log::info('Laravel 12 定时任务执行成功:'.now());
        return Command::SUCCESS;
    }
}

定义调度规则(Laravel 12 关键更新)

官方推荐:优先在 routes/console.php 中定义(11.x 及以上版本推荐,12.x 延续并优化),替代旧版本的 Kernel.phpLaravel:
// routes/console.php(直接写入,无需额外引入)
use Illuminate\Support\Facades\Schedule;

// 1. 调度自定义命令(示例:每分钟执行一次)
Schedule::command('demo:cron')->everyMinute();

// 2. 调度闭包(简单任务,无需生成任务类)
Schedule::call(function () {
    Log::info('Laravel 12 闭包定时任务:'.now());
})->dailyAt('03:00'); // 每天凌晨3点执行

// 3. Laravel 12 新增特性:指定每月特定几天执行
Schedule::command('demo:cron')->daysOfMonth(1, 15); // 每月1号、15号执行{insert\_element\_1\_}

兼容说明:若习惯用 app/Console/Kernel.php,在 schedule() 方法中定义也可,12.x 完全兼容旧写法。

配置系统定时任务(关键,必须执行,和旧版本一致)

直接配置当前用户(简单)

crontab -e

推荐:给 www用户配置:宝塔默认创建用户(和 web 服务同权限,避免读写文件报错)

crontab -e -u www

这个是加在编辑器里面,不是直接输入命令

* * * * * cd /www/wwwroot/项目地址根目录 && php artisan schedule:run >> /dev/null 2>&1
  1. 保存退出编辑器 如果是 nano 编辑器:按 Ctrl+O 保存 → 按 Enter 确认 → 按 Ctrl+X 退出; 如果是 vim 编辑器:按 Esc → 输入 :wq → 按 Enter 保存退出。
查看所有调度任务(Laravel 12 支持,清晰查看执行时间)
php artisan schedule:list
手动触发一次调度(测试任务是否能正常执行)
php artisan schedule:run
最近访问时间:2026-01-24 13:48:04
知识库:414条鸣谢:TAY  备案号:蜀ICP备2024090044号-1