wp-cron 的實現原理
簡單的說,wp-cron 會被每個頁面加載,? 也就是用戶訪問的時候,都會去檢查有哪些任務要執行,非常浪費性能,最重要的是不確定會不會執行。
相信有很多人跟我一樣,網站訪問量不高,這種依賴用戶訪問來觸發的機制,實在沒法滿足
1.? 禁用用戶自動觸發
在配置文件 wp-config.php 里添加:
define('DISABLE_WP_CRON', true);
2. 通過系統的 crontab 來觸發 wp-cron,這樣做的好處是,系統一定會按時去執行,不依賴用戶的訪問了。同時只會被觸發一次,而不是每個用戶訪問都要來檢測浪費性能。
在 Linux 命令行輸入:
crontab -e
然后會打開系統的 cron 服務編輯,有的系統可能會問你用哪種編輯器,推薦選擇 vim 或者 tinyvim。
然后加入一行
* * * * *? ?curl? ?https://example.com/wp-cron.php?>> /dev/null 2>&1
什么意思呢,就是每分鐘,系統都會去請求一次 wp-cron.php 這個文件,注意替換你的域名。 >> /dev/null 2>&1 意思是忽略響應的結果,我們不需要保存日志。
為什么是每分鐘呢,我明明想一個小時運行一次啊。因為 wordpress 自己會判斷何時執行任務,我們要做的就是及時的去觸發他。況且系統一分鐘只會訪問一次,不會造成壓力的。不僅提高了性能,還讓任務能及時執行。
3. 我的空間無法執行命令,或者我的系統是 windows,怎么辦?(即使是 Linux 系統,也推薦這種方式,管理真的很方便)
這個時候只能依賴第三方的工具了,這里我推薦2個有免費套餐的
- webcron.org?這個在國外用的比較多,界面不太好看,最重要的是,沒有免費套餐。
- URLCron?這個使用很簡單,界面簡潔美觀,可以查看運行的狀況和結果,管理很方便。還有免費套餐,完全夠用。
可以看到,添加任務只需要填入我們 wp-cron.php 的 URL 即可以,然后保存,其他的用不上,不用管。然后每次運行的記錄都會被保存,再也不用懷疑任務沒運行了。