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还是各种插件好用啊.
新闻热点
疑难解答
图片精选