在 CentOS 上使用 Laravel 做定时任务,标准做法是:使用 Linux 的 crontab 每分钟调用 Laravel 的调度器。
下面一步步说明。
Laravel 本身不直接管 cron,而是:
app/Console/Kernel.php 里定义任务php artisan schedule:run
php artisan make:command TestTask
编辑:
app/Console/Commands/TestTask.php
protected $signature = 'test:task';
public function handle()
{
\Log::info('定时任务执行了 '.now());
}
编辑:
app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->command('test:task')
->everyMinute(); // 每分钟
}
常见时间:
->everyMinute()
->everyFiveMinutes()
->hourly()
->daily()
->dailyAt('02:00')
->weekly()
crontab -e
* * * * * cd /path/to/laravel && php artisan schedule:run >> /dev/null 2>&1
示例:
* * * * * cd /var/www/laravel && php artisan schedule:run >> /dev/null 2>&1
⚠️ 必须用 项目根目录 ⚠️ php 最好写绝对路径,如
/usr/bin/php
which php
chown -R www:www storage
chmod -R 755 storage
tail -f storage/logs/laravel.log
php artisan schedule:run
php artisan list
❌ 定时没执行
✅ crontab 用户不对(用 crontab -l 检查)
❌ 时间不对
✅ CentOS 时区 & PHP 时区要一致
date
如果你愿意,可以告诉我:
我可以给你 完全贴合你服务器的配置示例。