WordPress 不知道在哪個版本里面加入了定時發布功能,這個本來其實是很不錯的功能,可惜有著各種各樣的問題,比如我這臺VPS安裝完成之后,就一直無法成功發布文章.
第一種可能性:
從程序的角度出發,定時發布應該是在服務端計算時間,推測不能成功發布的原因,有兩種可能性,第一個是時間計算是正確的,但是VPS 反應比較慢,等定時程序開始操作時,原定時間又過期了,導致進入無限循環,無法發布成功,我們先按照這個思路進行修改,在 /wp-includes/cron.php 中找到一段代碼,看起來是超時時間控制的代碼,代碼如下:
- $cron_request = apply_filters( ‘cron_request’, array(
- ‘url’ => add_query_arg( ‘doing_wp_cron’, $doing_wp_cron, site_url( ‘wp-cron.php’ ) ),
- ‘key’ => $doing_wp_cron,
- ‘args’ => array(
- ‘timeout’ => 0.01,
- ‘blocking’ => false,
- ‘sslverify’ => apply_filters( ‘https_local_ssl_verify’, false )
- //Vevb.com
- )
- ) );
先將timeout 的0.01修改為30.00,這樣有30秒的空檔時間,應該是肯定可以滿足條件了,修改完成之后,再次發布一篇文章進行測試,發現依然沒有發布成功.
第二種可能性:
那么考慮第二種錯誤的可能性,就是服務器上取得的時間不正確,這也是有可能性的,VPS上可能存在時間的有三個地方,分別是操作系統的時間、數據庫的時區設置、php的時區設置.
CentOS時區設置
查看 CentOS 系統時間的命令為:date -R,發現為 UTC 時間,中國應該為東8區,執行命令 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime,再次 date -R,顯示應該是:[root@li672-190 uploads]# date -R Wed,24 Dec 2014 23:30:39 +0800
Mysql時區設置:
Mysql 查看時區方法為:
- mysql -u root -p
- mysql> show variables like ‘%time_zone%';
- +——————+——–+
- | Variable_name | Value |
- +——————+——–+
- | system_time_zone | CST |
- | time_zone | SYSTEM |
- //Vevb.com
- +——————+——–+
這樣表示讀取的是系統時區,進行修改吧,修改的位置為 /etc/my.cnf。在 my.cnf 的[mysqld]項目中增加一條:
default-time-zone = ‘+8:00′
重啟mysql之后,再次進入mysql里面查看時區,應該顯示:
- mysql> show variables like ‘%time_zone%';
- +——————+——–+
- | Variable_name | Value |
- +——————+——–+
- | system_time_zone | CST |
- | time_zone | +08:00 |
- +——————+——–+
- 2 rows in set (0.00 sec)
PHP時區設置:
PHP中也有時區設置,設置位置為 /etc/php.ini,設置ini文件中的[Date] 項,設置時區為 date.timezone = Asia/Shanghai,然后重啟 php-fpm,通過修改這三個位置的時區設置之后,應該不會再有和wordpress相關的時區設置失誤了,重新進入wordpress的后臺,再次新建文章進行發布,依然提示失敗.
第三種可能性:
前面兩種方式都失敗了,懷疑是否程序有bug,查找網上其他人的經驗,發現了一個插件 WP Missed Schedule,安裝成功并啟用之后,問題解決,這個問題證明了,wordpress還是各種插件好用啊.
新聞熱點
疑難解答
圖片精選