在 CentOS 上让 Laravel 定时任务运行,标准做法是使用 Linux 的 crontab + Laravel 的 Task Scheduling。
下面一步一步说明:
路径:
app/Console/Kernel.php
在 schedule() 方法中定义任务,例如:
protected function schedule(Schedule $schedule)
{
// 每分钟执行一次
$schedule->command('demo:test')->everyMinute();
// 每天凌晨执行
$schedule->command('backup:run')->daily();
}
命令示例:
php artisan demo:test
crontab -e
如果是 web 用户(如 www 或 nginx),建议用:
sudo crontab -u www -e
* * * * * cd /path/to/laravel && php artisan schedule:run >> /dev/null 2>&1
✅ 说明:
* * * * *:每分钟触发schedule:run:Laravel 自己判断该执行哪些任务如果 php 不在 PATH 中,使用完整路径:
* * * * * cd /path/to/laravel && /usr/bin/php artisan schedule:run >> /dev/null 2>&1
查看 php 路径:
which php
确保:
storage 和 bootstrap/cache 可写临时把日志打开:
* * * * * cd /path/to/laravel && php artisan schedule:run >> /tmp/laravel_cron.log 2>&1
然后:
tail -f /tmp/laravel_cron.log
✅ 只写 一条 crontab
✅ 所有任务写在 Kernel.php
✅ 使用 withoutOverlapping() 防止重复执行
$schedule->command('demo:test')->everyMinute()->withoutOverlapping();
如果你愿意,可以告诉我:
我可以给你更精确的配置示例。