本文目录导读:

在 Laravel 项目中配置任务调度(Task Scheduling)的 Cron 写法如下:
基础 Cron 配置
在服务器的 crontab 中添加:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
或者更规范的写法:
* * * * * /usr/bin/php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
详细配置示例
基本配置
# 每分钟执行一次 * * * * * cd /var/www/html/laravel-project && php artisan schedule:run >> /dev/null 2>&1 # 使用绝对路径 * * * * * /usr/local/bin/php /var/www/html/laravel-project/artisan schedule:run >> /dev/null 2>&1 # 记录日志 * * * * * /usr/local/bin/php /var/www/html/laravel-project/artisan schedule:run >> /var/log/laravel-scheduler.log 2>&1
任务定义示例
在 app/Console/Kernel.php 中定义任务:
protected function schedule(Schedule $schedule)
{
// 每分钟执行
$schedule->command('command:name')->everyMinute();
// 每小时执行
$schedule->command('emails:send')
->hourly()
->between('6:00', '18:00');
// 每天凌晨执行
$schedule->command('report:generate')->dailyAt('00:30');
// 每周一早上执行
$schedule->command('tasks:weekly')
->weekly()
->mondays()
->at('08:00');
// 使用回调函数
$schedule->call(function () {
// 执行任务
})->everyFifteenMinutes();
}
常用调度频率
// 频率方法
$schedule->command('task:name')
->everyMinute(); // 每分钟
->everyFiveMinutes(); // 每5分钟
->everyTenMinutes(); // 每10分钟
->everyFifteenMinutes(); // 每15分钟
->everyThirtyMinutes(); // 每30分钟
->hourly(); // 每小时
->daily(); // 每天
->weekly(); // 每周
->monthly(); // 每月
->yearly(); // 每年
// 特定时间
->dailyAt('13:00'); // 每天13:00
->hourlyAt(17); // 每小时的第17分钟
->weeklyOn(1, '8:00'); // 每周一8:00
->monthlyOn(15, '10:00'); // 每月15日10:00
生产环境注意事项
单服务器配置
# 使用环境变量 * * * * * cd /path/to/project && php artisan schedule:run >> /dev/null 2>&1 # 避免输出 * * * * * cd /path/to/project && php artisan schedule:run >/dev/null 2>&1 &
多服务器配置(防止重复执行)
// Kernel.php
$schedule->command('report:generate')
->dailyAt('00:30')
->withoutOverlapping() // 防止重复
->onOneServer(); // 只在主服务器运行
查看和管理调度
# 查看调度列表 php artisan schedule:list # 测试执行 php artisan schedule:run # 测试特定命令 php artisan schedule:test-command command:name
日志和错误处理
$schedule->command('check:something')
->everyFiveMinutes()
->before(function () {
// 执行前
})
->after(function () {
// 执行后
})
->onFailure(function () {
// 失败时
Log::error('Task failed');
})
->onSuccess(function () {
// 成功时
});
Laravel 调度器每分钟运行一次,然后在 Kernel.php 中判断是否有需要执行的任务,这样可以让 cron 配置保持简单统一。