WP Crontrol:排程文章沒有自動執行時,查看失敗的 WordPress 工作

排程文章到了發佈時間卻仍是草稿、定期清理沒有執行,或系統通知與報表信件一直沒有寄出,問題不一定出在文章本身。WordPress 內建的 WP-Cron 是由網站請求觸發的排程機制;如果網站流量很低、主機封鎖回呼請求,或網站設定停用了 WP-Cron,排程工作就可能一直等不到執行。

本文使用 WP Crontrol 官方外掛查看排程事件與失敗線索。請先備份資料庫與檔案,並優先在測試環境操作;正式網站不要任意刪除未知事件,也不要反覆手動執行可能寄信、扣款或大量修改資料的工作。

先確認症狀與影響範圍

  • 排程文章已經超過預定時間,仍停留在「預排」或草稿狀態。
  • 定期清理暫存檔、資料庫或媒體檔案的工作沒有發生。
  • 訂閱通知、報表或系統提醒沒有寄出。
  • 外掛顯示有「錯過排程」或 missed schedule 類似訊息。
  • 只有低流量網站出現問題,管理員登入或訪客造訪後工作才突然執行。

排程事件通常由「事件名稱(hook)」辨識,而不是只看畫面上的中文說明。處理前先記錄事件名稱、參數、下次執行時間與所屬外掛,方便回溯。

安裝 WP Crontrol 並開啟排程事件

以具備管理員權限的帳號登入後台,前往「外掛」→「安裝外掛」,搜尋 WP Crontrol,確認作者與官方外掛頁面一致,再安裝並啟用。啟用後,通常可在「工具」→「Cron Events」或翻譯後的「排程事件」頁面查看網站目前登錄的工作。

不同 WordPress 與外掛翻譯版本的選單名稱可能略有不同;若在「工具」中找不到,請使用後台搜尋,或從 WP Crontrol 外掛頁面的使用說明確認目前介面。

查看事件名稱與下次執行時間

在排程事件清單中,先找出與問題相關的工作。重點欄位通常包括事件名稱、週期、下次執行時間、上次執行時間,以及是否有錯誤或警告。事件名稱可能像是 wp_version_check、wp_scheduled_delete,也可能是某個外掛自訂的 hook。

  • 事件名稱:記下完整 hook 名稱,並搜尋外掛文件或程式碼,確認是哪個外掛建立。
  • 下次執行時間:確認時區是否符合網站在「設定」→「一般」中的時區,並判斷是否已經逾期。
  • 週期:例如每小時、每日或自訂間隔。週期不代表一定會準時執行,仍要等 WP-Cron 被觸發。
  • 參數:若有 arguments,先記錄內容,不要在不了解用途時修改。
  • 錯誤線索:留意畫面上的 PHP 錯誤、回呼不存在、無效排程或 missed schedule 訊息。

若排程文章找不到明顯對應事件,不要直接認定 WP-Cron 完全失效。文章發布還可能受到排程時間、網站時區、權限、外掛衝突或佈景主題程式碼影響。可同時檢查文章狀態、預定時間與網站的錯誤日誌。

用一次手動執行驗證事件

請只挑選可安全重複、沒有外部副作用的事件,例如測試環境中的暫存清理或檢查類工作。確認事件用途後,在該事件旁選擇「Run Now」或「立即執行」,執行一次並記錄時間。

執行後從以下幾個方向驗證:

  • 事件的上次執行時間是否更新。
  • 預期的資料、暫存檔或狀態是否有合理變化。
  • 網站錯誤日誌、PHP-FPM 日誌或主機監控是否出現新錯誤。
  • 事件是否因執行失敗而再次顯示錯誤,或下次執行時間是否正常產生。

不要在正式站反覆按「立即執行」。寄信、建立訂單、扣款、呼叫第三方 API、刪除資料或批次更新內容的事件,手動執行可能造成真實副作用;這類工作應在測試環境驗證,或先取得負責人同意並安排低風險時段。

確認 WP-Cron 是否真的被觸發

WP-Cron 不是常駐的背景服務。一般情況下,訪客或後台請求會嘗試觸發待處理的排程。因此低流量網站可能長時間沒有執行;若網站使用快取、回呼被防火牆阻擋,或 wp-cron.php 被主機規則拒絕,也會造成排程延遲。

  • 檢查網站是否在 wp-config.php 設定 DISABLE_WP_CRON 為 true。若是,確認是否已有主機的系統排程接手,避免直接改動正式站設定。
  • 查看網站存取日誌,搜尋 /wp-cron.php 是否有請求,以及回應碼是否為 200、403、404 或 500。
  • 檢查主機防火牆、WAF、基本認證、維護模式與安全性外掛,確認它們沒有阻擋網站自身的回呼請求。
  • 檢查 PHP 錯誤日誌與 WordPress Site Health,留意 loopback request、逾時、記憶體不足或 SSL 憑證錯誤。
  • 若流量低,依照WordPress 官方 Cron 文件規劃主機系統排程,定期以命令列或受控的 HTTP 請求觸發;設定前先確認主機商支援方式。
# 僅供具備主機管理權限的維護人員參考;執行前確認網站路徑與使用者
*/5 * * * * cd /var/www/example && wp cron event run --due-now --quiet

若使用 WP-CLI,請先在測試環境以 wp cron event list 查看待處理事件,再用 wp cron event run --due-now 執行到期事件。這個指令可能一次執行多個工作,不應在不了解事件內容時直接套用到正式站。

從錯誤線索縮小範圍

  • 若只有某個外掛的事件失敗,先更新前備份,再查看該外掛版本相容性、設定與官方支援紀錄。
  • 若多個事件都逾期,優先檢查 WP-Cron 觸發、loopback request、主機限制與 PHP 資源。
  • 若執行時出現「callback 不存在」或函式錯誤,可能是外掛被停用、更新不完整,或事件由已移除的程式碼建立。
  • 若工作執行成功但寄信仍失敗,請另外檢查郵件服務與 SMTP 設定,不要把所有問題都歸因於排程。
  • 若文章仍沒有發布,檢查文章預定時間、網站時區、作者權限,以及是否有內容審核或工作流程外掛攔截。

停用外掛、移除事件與回復方式

WP Crontrol 主要是檢視與操作工具,停用它通常不會刪除其他外掛的排程事件。若要測試外掛衝突,先記錄目前外掛清單與事件資料,再於測試環境停用可疑外掛並觀察結果;正式站可使用維護時段或 WordPress 疑難排解模式,避免直接影響訪客。

不要因為事件名稱看不懂就按「Delete」或「Remove」。移除事件可能使原外掛無法完成清理、寄送或同步工作。只有在確認事件屬於已移除的外掛、重複建立的測試工作,並且已取得備份與回復計畫後,才考慮移除。若誤刪,重新啟用或重新儲存相關外掛設定有時會重新註冊事件;更可靠的方式是依備份或外掛文件回復,必要時請主機商或開發人員協助。

一份可交接的檢查紀錄

  • 問題首次發生時間、網站時區與受影響功能。
  • 事件名稱、參數、週期、下次與上次執行時間。
  • 手動執行前後的畫面截圖與驗證結果。
  • PHP、Web 伺服器、WordPress Site Health 或主機監控中的錯誤訊息。
  • 是否設定 DISABLE_WP_CRON、系統排程與相關主機限制。
  • 任何停用外掛、修改設定或移除事件的時間、操作者與回復方式。

完成修正後,至少等待一個排程週期,再回到 WP Crontrol 確認事件是否按預期更新;對排程文章則建立一篇測試文章,使用短時間的未來時間驗證發布結果。確認成功後,再在正式環境安排低風險的監控與定期檢查。

參考來源

相連文章

臉書留言

一般留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *