在 Linux 上使用 Laravel 做定时任务,核心就是:Linux 的 crontab + Laravel 的调度器(Task Scheduling)。
下面一步一步来。
routes/console.php 或 app/Console/Kernel.php 中定义推荐方式( Laravel 8+ 常用):在 routes/console.php
use Illuminate\Support\Facades\Schedule;
Schedule::command('emails:send')->daily();
或者在 app/Console/Kernel.php 的 schedule() 方法中(旧写法):
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send')->daily();
}
->everyMinute();
->everyFiveMinutes();
->hourly();
->daily();
->weekly();
->monthly();
->dailyAt('13:30');
crontab -e
* * * * * cd /path/to/your/project && php artisan schedule:run >> /dev/null 2>&1
说明:
* * * * *:每分钟执行一次schedule:run 会判断是否到时间执行 Laravel 的任务/path/to/your/project 换成你的 Laravel 根目录✅ 只需要这一条 crontab,不需要每个任务写一条
php artisan schedule:list
php artisan schedule:run
storage/logs/laravel.log
确保:
storage 可写crontab 环境很少,建议写全路径:
* * * * * /usr/bin/php /var/www/laravel/artisan schedule:run
在 .env 中设置:
APP_TIMEZONE=Asia/Shanghai
* * * * * cd /var/www/laravel && php artisan schedule:run >> /var/log/laravel-schedule.log 2>&1
如果你愿意,可以告诉我:
我可以给你完全对应的配置示例。