在 Linux 上使用 Laravel 定时任务,核心思路是:
只写一个 Linux Cron,把所有任务交给 Laravel 的 schedule 管理。
编辑当前用户的定时任务:
crontab -e
添加这一行(最关键):
* * * * * cd /path/to/laravel && php artisan schedule:run >> /dev/null 2>&1
说明:
* * * * *:每分钟执行一次/path/to/laravel:你的 Laravel 项目根目录✅ 不要在 Linux 里写多个 cron,全部交给 Laravel
文件路径:
app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->call(function () {
\Log::info('每分钟执行一次');
})->everyMinute();
}
$schedule->command('email:send')->daily();
$schedule->command('backup:run')
->dailyAt('02:30');
$schedule->command('cache:clear')->hourly();
先创建一个命令:
php artisan make:command SendEmails
在 app/Console/Commands/SendEmails.php 中:
protected $signature = 'email:send';
public function handle()
{
// 业务逻辑
}
然后在 Kernel.php:
$schedule->command('email:send')->daily();
| 方法 | 说明 |
|---|---|
->everyMinute() |
每分钟 |
->everyFiveMinutes() |
每 5 分钟 |
->hourly() |
每小时 |
->daily() |
每天 0 点 |
->dailyAt('13:00') |
每天 13 点 |
->weekly() |
每周 |
->monthly() |
每月 |
->cron('0 0 * * 0') |
原生 cron |
php artisan schedule:run
php artisan schedule:list
php 路径不对 → 用 which php 确认chown -R www:www storage bootstrap
在 .env 中:
APP_TIMEZONE=Asia/Shanghai
✅ Linux:1 个 cron
✅ Laravel:Kernel.php 统一管理
✅ 命令:php artisan make:command
如果你愿意,可以告诉我:
我可以直接帮你写完整示例。