用Linux系统cron替代wordpress的wp-cron

2015-02-11 15:23:57    2015-02-11 15:25:43

在WordPress下面有一个叫wp-cron.php的文件,和操作系统的cron类似,它是用来执行一些定时的任务,比如定时启动自动备份,或者定时发布新帖子之类的。对wordpress来说是很重要的文件。据说在默认状态下,打开每个页面前都要先执行wp-cron.php这个文件。会对页面载入时间造成一定影响。但它的功能对wordpress来说又是不可或缺的,所以我们不能简单地把它一关了之,禁用后仍然要找替代的方法来定时执行它。所以我们可以用系统自带的cron程序来定期激活它一下。

禁用系统自带的wp-cron

在Wordpress系统配置文件wp-config.php里加上下面这行:

define('DISABLE_WP_CRON', true);

设定Linux系统下的定时任务cron

在命令行下执行编辑cron任务命令:crontab -e

然后在最下面增加以下的命令(选其中一个就够了)

*/10 * * * * php /var/www/example.com/htdocs/wp-cron.php > /dev/null 2>&1

或者是

*/10 * * * * wget http://example.com/wp-cron.php -O /dev/null

上面两条里的wp-cron.php地址要根据你自己的网站做相应修改

以上两条的区别是:第一条是用PHP-CLI来执行,没有最大执行时间限制,但有些功能(比如有些关于Cache的函数)在命令行执行方式下无法正常运行。第二种方式是以PHP-FPM (或PHP-CGI)的方式运行,就和用浏览器打开网页的方式类似,但会有执行时间的限制。一般来说个人觉得后者比较简单实用。

其中第一个*/10代表每10分钟执行一次,如果要改成5分钟,只要变成*/5就行了

这样的话,wp-cron.php就会按照设定的时间定时启动,而不是在每次用户打开页面时就载入,如果你访问量大的话,能够减轻系统负担,加快用户打开速度(虽然在感觉上其实并不明显)。而且Linux系统自带的cron比wp-cron.php更稳定可靠。比如我前一阵子装了一个每天定时备份wordpress的插件,但设定的每天自动启动开始备份一直有问题(我猜是wp-cron的问题),经常两三天都不启动自动备份。自从换成系统的cron后,每天准时备份,就再也没出过问题。