Laravel调度任务异常:schedule:list显示错误且仅首个任务运行
Laravel调度任务问题:间隔显示错误+仅首个任务运行的解决方案
问题分析
你遇到的两个问题根源分别在于:
- schedule:list间隔显示错误:Laravel 8的
everyTenMinutes()快捷方法可能存在缓存或解析问题,导致生成的Cron表达式不符合预期; - 仅第一个任务运行:ofelia的调度频率设置错误,Laravel调度器要求每分钟执行一次
schedule:run,而你设置的每5分钟执行会错过大部分任务的触发时机。
具体解决步骤
一、修复schedule:list间隔显示错误
- 清除所有缓存
执行以下命令清除Laravel的配置、路由及应用缓存:
php artisan config:clear php artisan route:clear php artisan cache:clear
如果使用了OPcache,重启PHP-FPM服务以清除缓存的类文件。
- 替换快捷方法为手动Cron表达式
放弃使用everyTenMinutes(),直接指定正确的Cron表达式*/10 * * * *(每10分钟执行一次),修改Kernel类的schedule方法:
protected function schedule(Schedule $schedule) { $schedule->command('socialReviews:refreshGoogleToken')->everyMinute(); // 替换everyTenMinutes为手动cron表达式 $schedule->command('socialReviews:retrieveGoogle')->cron('*/10 * * * *'); $schedule->command('socialReviews:retrieveFacebook')->cron('*/10 * * * *'); }
修改后再次执行php artisan schedule:list,检查Interval列是否显示为*/10 * * * *。
二、修复仅首个任务运行的问题
修改ofelia的调度规则,将schedule:run的执行频率改为每分钟一次。因为Laravel的调度器需要每分钟运行一次schedule:run,才能逐个检查所有任务是否到达执行时间。
调整后的ofelia任务配置类似:
[job] command = "php /var/www/artisan schedule:run >> /dev/null 2>&1" schedule = "* * * * *"
额外排查步骤
- 验证命令本身可用性
手动执行后两个任务,确认命令没有报错:
php artisan socialReviews:retrieveGoogle php artisan socialReviews:retrieveFacebook
- 查看Laravel日志
检查storage/logs/laravel.log文件,确认后两个任务是否有执行记录或错误信息。
内容的提问来源于stack exchange,提问作者Tiago Gouvêa
相关产品推荐
相关产品推荐

