Laravel 定時任務突然無法執行

沈益飛發表於2019-10-12

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

相關文章