Featured image of post 處理 WordPress 的 Past-Due Actions

處理 WordPress 的 Past-Due Actions

使用 WP-CLI 快速處理 Action Scheduler 的 Past-Due Actions 堆積,先執行 run 消化佇列,再以內建 cleaner 清理可刪除的歷史紀錄,不影響未完成的 pending 任務。

最後更新
約 1167 字

前言

WordPress 網站若使用 WooCommerce、Action Scheduler 或依賴排程任務的外掛,常會遇到後台「Past-Due Actions」數量暴增、任務堆積的狀況。 本文說明如何用 WP-CLI 快速消化佇列並清理歷史資料,無須手動改資料庫,也不會刪除尚未完成的 pending 任務。

TL;DR

  1. wp action-scheduler run 執行排程任務,消化佇列。
  2. wp action-scheduler status 檢查狀態;若仍堆積,再執行清理。
  3. wp action-scheduler clean 清理可刪除的歷史紀錄(不會刪 pending)。
  4. 再次執行 wp action-scheduler status 確認結果。

前置需求

  • 伺服器或本機已安裝 WP-CLI
  • 在網站根目錄(含 wp-config.php 的目錄)執行指令,或使用 --path= 指定路徑。

何時才有 wp action-scheduler 指令?

wp action-scheduler(包含 statusrunclean 等子指令)並非 WP-CLI 內建,而是由 Action Scheduler 這個程式庫在啟用時註冊給 WP-CLI 的。因此只有在以下情況才會存在:

  • 已安裝並啟用使用 Action Scheduler 的外掛,例如:
    • WooCommerce(內建 Action Scheduler,最常見)
    • 其他依賴 Action Scheduler 的外掛(如部分備份、排程、訂閱外掛)

若網站沒有安裝這類外掛,執行 wp action-scheduler status 會出現「指令不存在」或類似錯誤。此時代表該站沒有 Action Scheduler,也就不會有 Past-Due Actions 佇列問題;本文的步驟僅適用於已使用 Action Scheduler 的網站。

可先執行以下指令確認是否有此指令:

1
wp action-scheduler --help

有列出子指令(如 runstatusclean)即代表環境可用。

步驟一:執行排程任務

先讓 Action Scheduler 消化已到期的任務:

1
wp action-scheduler run

此指令會處理目前到期的 actions。若堆積很多,可多執行幾次,或搭配 cron 定期執行。

步驟二:檢查狀態

若有 status 子指令,執行後可查看佇列狀態:

1
wp action-scheduler status

輸出會顯示各狀態的數量(例如 Pending、Complete、Canceled、Past-due 等)。若 Past-duePending 仍很多,可繼續下面的清理步驟。

若環境沒有 status(僅有 run),可改到 WordPress 後台查看排程任務數量(例如 WooCommerce → 狀態 → 排程任務),再決定是否多跑幾次 run 或進行清理。

步驟三:清理可刪除的歷史紀錄

Action Scheduler 內建 cleaner,會刪除已完成、已取消等可安全刪除的歷史紀錄不會刪除未完成的 Pending 任務

1
wp action-scheduler clean

預設會清理完成超過 30 天的紀錄,可減少資料表體積並改善查詢效能。

步驟四:再次檢查狀態

若有 status,清理後建議再確認一次:

1
wp action-scheduler status

若沒有 status,可從後台排程任務畫面確認。若 Past-due 仍多,可重複「步驟一 → 步驟二」多跑幾次 wp action-scheduler run,再視需要重跑 wp action-scheduler clean

補充說明

  • wp action-scheduler run:只「執行」到期任務,不刪除資料;適合先消化堆積。多數有 Action Scheduler 的環境都會提供此指令。
  • wp action-scheduler status / clean:依外掛或程式庫版本,可能只有 run 而沒有 statusclean,需以後台或其它方式檢查與清理。
  • wp action-scheduler clean:只刪除可清理的舊紀錄,不動 pending;適合定期維護(有該指令時)。
  • 若網站使用 DISABLE_WP_CRON,建議用系統 cron 定期執行 wp action-scheduler run,避免再次大量堆積。

參考資料


使用 Hugo 建立
主題 StackJimmy 設計