我应该禁用wp_cron,而每隔几分钟从服务器触发wp-cron.php吗?

时间:2017-01-20 作者:TheBigK

看起来WordPress在每次加载页面时都会不必要地触发WP CRON。我在想,与其让它在每次访问时都运行,为什么不通过服务器安排它每5分钟运行一次呢?我可以简单地触发wp cron。每五分钟进行一次php并达到预期效果?

这有什么坏处吗?

4 个回复
SO网友:Fayaz

使用服务器的CRON作业运行WP-CRON没有任何缺点。事实上,这是推荐的做法。

根据Official WordPress Plugin Development Document:

WP Cron不连续运行,如果有必须按时运行的关键任务,则可能会出现问题。有一个简单的解决方案。只需将系统的任务调度器设置为按您希望的时间间隔(或在所需的特定时间)运行即可。

要做到这一点,首先需要禁用中的默认cron行为wp-config.php:

define(\'DISABLE_WP_CRON\', true);
那么,时间表wp-cron.php 从您的服务器。对于Linux,这意味着:

crontab -e
但是,不要在命令行(CLI)中运行它,而是将其作为HTTP请求运行。您可以使用wget:

*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron
WordPress加载所有必需的核心文件、插件等wp-cron.php 使用以下代码:

if ( !defined(\'ABSPATH\') ) {
    /** Set up WordPress environment */
    require_once( dirname( __FILE__ ) . \'/wp-load.php\' );
}
所以不要担心WordPress没有加载重要功能。

SO网友:TechnicalChaos

有几个缺点:首先,当使用wp-cron时。php作为cli没有设置$\\u服务器变量等内容。人们通过对wp cron使用curl请求来克服这个限制。而不是php。

其次,因为WP本身没有加载WP cron。php;如果您使用SMTP邮件程序插件,则在调用wp cron时不会加载该插件。同样,使用curl调用可以解决这个问题。卷曲似乎是最常用的方法。

然而在postfix和(对于nginx)php fpm config中正确设置邮件设置并设置crontab(如

*/5    *   *   *   *  wp cron event list --skip-plugins --skip-themes --path="/var/www/vhosts/example.com/httpdocs/wp" --fields=hook,next_run_relative --format=csv | awk -F, \'$2=="now" {print $1}\' | xargs -r wp --path="/var/www/vhosts/example.com/httpdocs/wp" cron event run $1
(以csv格式列出具有特定字段的所有cron-hook是cron的名称,next run relative是时间。使用AWK去掉显示“now”作为下一次运行(现在到期)的cron,将该列表传递给xargs以调用wp cron event run $HOOK 在每个cron上。)使用wp cli可以正确加载WordPress(我选择在列出cron时跳过插件,因为代码错误和php警告会破坏脚本输出;但在使用xargs运行cron时不要跳过插件,因为cron可能需要加载插件)

希望这能为您提供一些注意事项的指导。

SO网友:Radoslav Stefanov

我还没有找到将wp cron卸载到外部服务的真正缺点。多年来一直这样做。

尤其是在当今世界,您可以将应用程序作为微服务运行。

我为每个WordPress组件使用单独的Docker容器(php、web、db、crontab、redis等)。将crontab作为单独的容器,使用本地网络通过http调用wp cron,仅在需要时运行。

这减少了后端节点的压力,并通过更小的攻击面提高了安全性。

如果开发人员在每次加载页面时都不必调用wp cron就无法解决问题,见鬼,这说明他缺乏经验。“别管它”,因为你不了解事情是如何运作的,这不是保持它的好理由。

SO网友:John Dee

不禁用wp cron有很多原因。事实上,几乎不可能找到这样做的用例。它不会减慢你的网站速度,而且它用于你可能不知道的事情。

许多插件使用WP-Cron来安排事情。如果关闭计划程序,他们可能会感到困惑。

关于这个主题的教程越来越多,因为它令人困惑,而且当您禁用它时,它对您的站点没有多大作用。它将要做的是,让开发人员头疼,他们必须在六个月内解决它带来的神秘问题。

此外,WP心跳信号在管理区域每隔15秒触发一次,99%的人认为他们有心跳信号,从而解决了这个问题。

相关推荐

Wordpress wp-cron not working

Cron未按预期工作。如果我安排帖子或事件管理器事件,如果在发布时间之后访问站点,则不会发布。如果我去http://somedomain.tld/wp-cron.php?doing_wp_cron 它为空,而调试设置为打开。它应该是空的还是应该显示一些错误(如果有)?错误日志为空。WP Crontrol插件显示cron作业。有没有提示下一步要检查什么?