WordPress 後台的許多工作是靠排程任務在幕後運作的,從備份、自動發布文章到外掛清理,都需要定時觸發。但許多站長不知道,WordPress 的排程機制有個隱藏的侷限,搞不好就會出現「備份明明設定要跑卻從沒執行」或「預約文章到時間還沒發布」的問題。這篇文章帶你理解 WordPress 排程任務的實際運作邏輯,教你用免費工具查看與管理,也說明怎麼改善預設機制的可靠度。
WP-Cron 是假的排程,不是真的 Cron
WordPress 的排程系統叫 WP-Cron,這個名字容易造成誤會。大部分人聽到「Cron」會以為是伺服器層級的系統排程,但實際上該系統是 WordPress 內建的偽排程——每當有訪客瀏覽網站時,WordPress 才會檢查有沒有排程任務該執行,如果該執行就跑。
這個設計有個明顯問題:如果網站流量很低,可能好幾天都沒人來訪,排程任務也就一直沒有機會執行。一個應該每天跑一次的備份,可能會跳過好幾天才執行。另一個極端狀況是網站突然大量流量湧入,多個訪客同時觸發了同一個排程任務,導致伺服器資源被大量占用。
該排程系統的運作原理很簡單:WordPress 在 wp_options 資料表裡紀錄下次執行各個任務的時間,訪客來訪時會檢查有沒有排程任務逾期。如果逾期了,就在訪客的請求過程中執行任務。這看似方便——無需額外設定——但代價是可靠性很低,不適合重要工作。
用 WP Crontrol 查看後台排程任務
WordPress 本身沒有內建介面查看排程任務清單,所以很多站長根本不知道系統裡跑著什麼工作。幸好有個免費外掛叫 WP Crontrol,能把所有排程任務列出來,還能手動觸發或刪除。
安裝 WP Crontrol 後,在後台工具選單裡會多出「排程事件」選項。進去會看到三個分頁:「排程」、「執行日誌」與「測試」。排程分頁列出所有已登錄的任務,包含任務名稱、下一次執行時間、執行週期(一次性或重複)與觸發來源(核心或哪個外掛)。你可以從這個清單看出來有哪些備份、更新檢查、內容發布等工作在跑。
執行日誌會記錄最近跑過的排程,包括任務名稱、執行時間與執行耗時。這對排查「為什麼任務沒跑」很有幫助。例如,如果某個備份外掛的排程記錄裡從沒出現執行,那就代表網站流量真的不夠,或者該系統被停用了。測試分頁可以手動執行某個排程任務,用來驗證任務是否正常運作。
透過 WP Crontrol,你能掌握後台的排程全貌,也能在緊急時刻手動觸發備份或清理作業。
常見排程問題的診斷方式
排程任務最常見的問題有三類:備份沒在執行、預約文章沒有按時發布,以及某些外掛的定時清理工作沒跑。
備份沒執行通常是因為流量太低,該系統沒有機會觸發。另一個可能是 wp-cron.php 被停用了——有些主機會出於安全考量禁用該排程機制,或是根本沒有訪客觸發檢查。用 WP Crontrol 的執行日誌檢查備份任務有沒有執行記錄,如果日誌是空的,代表從沒跑過。
預約文章沒發布的情況比較複雜。WordPress 發布排程的原理是設定一個排程任務,在文章排程時間來臨時改變文章狀態。如果沒有訪客來觸發排程檢查,文章會一直停留在「排定」狀態。除了該系統的問題,有時候是時區設定不對——如果伺服器時區跟 WordPress 設定不一致,計算出來的執行時間就會錯位。檢查方法是在後台設定的「一般設定」確認時區是不是對的。
還有一種隱藏的情況是該排程機制被外掛衝突干擾。如果某個安全外掛或效能外掛禁用了不安全的遠端請求,該系統的檢查可能被攔截。用 WP Crontrol 測試分頁手動觸發一個任務,看有沒有報錯,能幫助判斷問題源頭。
用伺服器真實 Cron 提升可靠度
如果你的網站需要高可靠的排程(例如電商備份必須每天執行),光靠 WordPress 內建的該系統不夠,應該改用伺服器層級的真實 Cron。做法是禁用該排程機制,改由伺服器每隔一段時間自動呼叫 WordPress 的排程檢查。
首先在 wp-config.php 加入一行設定:define( ‘DISABLE_WP_CRON’, true )。這會關閉該系統的自動檢查機制。接著登入主機的 cPanel(或對應的主機控制面板),在「進階」區域找「Cron 作業」,新增一個 cron 任務。任務的指令是:wget -q -O – https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1,把 yoursite.com 換成你的網域。設定排程為每 12 分鐘跑一次,這樣就足以涵蓋大多數排程任務。
用伺服器真實 Cron 的好處是獨立於網站流量——即使沒有訪客,排程也會準時執行。缺點是需要對伺服器後台有存取權,通常只有 VPS 或專屬主機的站長才有這個能力。如果你用的是共享主機,有些主機商已經設定好自動呼叫該排程機制,不用自己動手。
排程任務的監控與維護
設定好排程後,還要定期檢查執行狀況。WP Crontrol 的執行日誌是最直接的方式,但如果任務失敗不會留下明顯的錯誤訊息,日誌只會顯示執行時間,看不出來有沒有成功。對於備份這類重要任務,最好的做法是另外裝一個備份外掛本身的通知機制——大多數備份外掛都支援執行成功或失敗時寄郵件通知。設定好 SMTP 郵件,每次備份結束都會收到報告,能及時發現問題。
另一個維護重點是定期清理過期的排程記錄。WP Crontrol 的執行日誌會累積,放著不清理的話資料表會越來越大。進到 WP Crontrol 主頁,有個清理工具能刪除 14 天前的日誌。大型網站可以設定更頻繁的清理,避免資料庫負擔。
如果某個外掛被停用或刪除,它登錄的排程任務不會自動清除。長期累積的孤立排程會浪費資源,偶爾要用 WP Crontrol 檢查一次,把找不到對應外掛的排程刪除。
該排程系統在多數情況下能穩定運作,但關鍵任務最好不要依賴內建的偽排程。理解了運作原理,用對工具檢查,再搭配伺服器真實 Cron,就能讓網站的後台工作更加可靠。