在 Linux 下为 Laravel 配置定时任务,通常是通过 Linux 的 crontab + Laravel 的 Task Scheduling 来实现的。下面一步步说明。
在 app/Console/Kernel.php 的 schedule 方法中定义任务:
protected function schedule(Schedule $schedule)
{
// 每分钟执行一次
$schedule->command('inspire')->everyMinute();
// 每天凌晨执行
$schedule->command('backup:run')->daily();
// 调用闭包
$schedule->call(function () {
// 自定义逻辑
})->hourly();
}
常用时间方法:
->everyMinute()->everyFiveMinutes()->hourly()->daily()->weekly()->monthly()Laravel 本身不会自动运行,需要 Linux 的 cron 来“每分钟调用一次” Laravel 调度器。
crontab -e
* * * * * cd /path/to/your/laravel && php artisan schedule:run >> /dev/null 2>&1
示例(普通用户):
* * * * * cd /var/www/laravel && php artisan schedule:run >> /dev/null 2>&1
示例(指定 PHP 路径):
* * * * * cd /var/www/laravel && /usr/bin/php artisan schedule:run >> /dev/null 2>&1
✅ 这一行会让 Laravel 自己判断“哪些任务该执行”。
检查:
php artisan schedule:run
手动执行是否报错。
tail -f /var/log/cron
# 或
tail -f /var/log/syslog | grep CRON
which php
确保 crontab 中使用的是正确 PHP。
storage/ 目录可写$schedule->command('backup:clean')->daily()->at('01:00');
$schedule->command('backup:run')->daily()->at('02:00');
crontab 只需要:
* * * * * cd /var/www/laravel && php artisan schedule:run
Linux crontab 只负责“每分钟调用一次 Laravel”,具体任务由 Laravel 自己管理。
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置。