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 協議》,轉載必須註明作者和本文連結