Laravel 定时任务突然无法执行
Laravel 框架在更新的时候突然不执行定时任务了?
检查定时任务是否执行
- 查看定时任务是否在执行?定时任务在 Laravel 框架里面的日志、Linux 系统的日志。
- 查看定时任务命令行是否可以执行?手动执行定时任务的命令行。
发现命令行和定时任务正常的执行。
检查定时任务代码
发现可以执行的定时任务和没有执行的定时任务有代码差异:
withoutOverlapping();
这个方法使用了 Redis 原子锁防止定时任务重复执行的。
原文:
如有需要,你可以在「without overlapping」锁过期之前,指定它的过期时间。默认情况下,这个锁会在 24 小时后过期。
/**
* Get the mutex name for the scheduled command.
*
* @return string
*/
public function mutexName()
{
return 'framework'.DIRECTORY_SEPARATOR.'schedule-'.sha1($this->expression.$this->command);
}
删除了 Redis 所有 key 带有 schedule- 就正常执行了。
结论
最好增加执行过期时间。
本作品采用《CC 协议》,转载必须注明作者和本文链接
可以让锁一直有效吗,通过设置过期时间为0?