這兩天網(wǎng)站CPU天天100+的,過(guò)一會(huì)就掛了,,原來(lái)是wp-cron.php文件造成的,。
wordpress的定時(shí)任務(wù)功能我們還是經(jīng)常要用到的,例如wordpress的定時(shí)備份,,定時(shí)發(fā)布文章等都需要用到wordpress的定時(shí)任務(wù)功能,,而在wordpress中,是靠wp-cron.php來(lái)實(shí)現(xiàn)這些功能的,。但是昨天本人網(wǎng)站就出現(xiàn)CPU嚴(yán)重超標(biāo)的情況,,導(dǎo)致被主機(jī)商停機(jī),好不容易聯(lián)系上客服,,被告知是由于wp-cron.php文件造成的,。原來(lái),在使用了wp-super-cache緩存插件的時(shí)候,,后臺(tái)會(huì)有很多wp-cron.php的調(diào)用,,每一次訪問(wèn)頁(yè)面都會(huì)調(diào)用。這樣就容易出現(xiàn)cpu超標(biāo)的情況了,。
WP-Cron的原理是這樣的:雖然用戶不能通過(guò)crond設(shè)置計(jì)劃任務(wù),,但網(wǎng)站隨時(shí)可能會(huì)有用戶在點(diǎn)擊,只要在用戶點(diǎn)擊的時(shí)候,,判斷當(dāng)時(shí)是否有需要運(yùn)行的后臺(tái)任務(wù),,如果則在后臺(tái)運(yùn)行該任務(wù),就可以實(shí)現(xiàn)類似crond的效果。雖然這么好用,,不過(guò)占用這么高的系統(tǒng)資源我就不得不禁用它了,。
禁用WP-Cron很簡(jiǎn)單,編輯wp-config.php,,加入一下一行:
define('DISABLE_WP_CRON', true);
當(dāng)然了,,如果你的主機(jī)可以設(shè)定crontab,你可以在你后臺(tái)系統(tǒng)的crontab文件里,,增加下面的代碼:
*/15 * * * * YOUR_USER /usr/bin/wget -q --post-data '' http://YOUR_SITE/wp-cron.php?doing_wp_cron -O /dev/null
上面配置指示,,每15分鐘,調(diào)用wget命令訪問(wèn)站點(diǎn)的wp-cron.php文件,,post-data參數(shù)指示wget用POST方法,,而不是GET方法,這樣可以避免WP-Super-Cache這樣的緩存插件影響后臺(tái)任務(wù)的正確執(zhí)行,,但post-data傳輸?shù)臄?shù)據(jù)必須是空內(nèi)容,,否則wp-cron.php會(huì)拒絕執(zhí)行。
或者系統(tǒng)的crontab中添加
0,30 * * * * php -q /path_to_your_website/public_html/wp-cron.php