laravel12 任务调度的使用方法详细版
创建定时任务(和旧版本一致,无变化)
执行 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
- 保存退出编辑器 如果是 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