如果你的 WordPress 的 wp-cron 計畫是正常的工作,且流量不多,就不必 disable wp-cron 這功能,就讓它正常運行,對網站的影響不大;WordPress 在默認情況下,如有設置計劃的任務存在時,有人訪問您的網站時,就會觸發 wp-cron.php 動作。
從上面的解釋來看,沒有時麼不對的地方,但是當流量變大時,或安裝一些安全外掛時,這就會變成一個不好用的小程序:
- 當網站訪問用戶增加或特別多的時候,每瀏覽一次網頁,都會去檢查當前是否有任務要執行,多次檢查計劃的任務,增加主機的負載及加載時間。
- 又當網站的訪問用戶很少或者安裝了靜態緩存外掛,計畫的任務可能又不運行。
- 安全防護外掛,防止了某個計畫腳本運行,因此 wp-cron 又不起作用了。
最近維護的一些網站,也有都發生 wp-cron 不乖乖工作,也查不出來是甚麼原因造成的,但這會影響 UpdraftPlus 或其他定時備份外掛,不會在指定的時間備份網站,這對一個網站的安全來說是一個隱憂。
禁用 wp-cron
當 WordPress 的 wp-cron 不工作,可以將 wp-cron 關閉它,而用主機的定時計畫 crontab 來取代。
Disable wp-cron (禁用 WordPress 計畫任務):
修改 wp-config.php 文件中,添加以下代碼來禁用 WordPress 默認的 wp-cron 運行:
define('DISABLE_WP_CRON', true);
在主機端開啟一個 crontab 計畫:
crontab -e
添加下面的指令 (以 EasyEngine 為例):
*/10 * * * * cd /var/www/example.com/htdocs; php /var/www/example.com/htdocs/wp-cron.php?doing_wp_cron > /dev/null 2>&1
其他系統:(請自行修改為正確的網站路徑)
*/10 * * * * cd /home/user/public_html; php wp-cron.php > /dev/null 2>&1
以上的指令是每 10 分鐘運行一次 wp-cron。你可以更改 */15 或 */5 使其更長或更短的時間來運行一次。
如果你是用虛擬主機,可以查看 cPanel 後台,有沒有 Cron Jobs 的功能,不一定每一家主機商都會開啟這個功能,設置上可參考下面鏈接的教學。
cPanel 開啟 Cron Jobs 教學
https://www.inmotionhosting.com/support/website/wordpress/disabling-the-wp-cronphp-in-wordpress
結語
如果你是一個高流量的網站,也建議將 WordPress 默認的 wp-cron 關閉。
使用主機的 crontab 運行,wp-cron 將改由獨立的 PHP 進程運行,所以它不會干擾任何訪客頁面請求,也大大降低了 CPU 的負載。
參考文件:
Why WP-Cron sucks
https://www.lucasrolff.com/wordpress/why-wp-cron-sucks/
Rocket-Nginx
發佈留言