禁用了wp-cron,设置了系统cron,但仍错过了计划开机自检

时间:2017-06-21 作者:Gary Hall

我有一个缓存插件(WP-Rocket),所以我知道WP-cron和预定帖子的问题。所以,我禁用了wp-cron 然后设置系统cron。现在,我注意到,当一篇文章被安排时,它没有设置为HH:MM:00 但有些数字大于0 秒。因此,我将系统cron设置为每隔5分钟和35分钟运行一次wp cron。但我还是错过了发帖时间表。我知道它会运行,因为我记录了输出,其中显示200 返回代码加上我看到的缓存文件的时间戳分别为5分钟和35分钟。

define(\'DISABLE_WP_CRON\', true);
Cron条目(我用x标出了我的用户名。我还有一个可以保存35分钟并输出到wget35.log的用户名):

5   *   *   *   *   wget -o /home/xxxxx/logs/wget5.log https://www.jennystampsup.com/wp-cron.php?doing_wp_cron 2>/home/xxxxx/logs/wget5.err
使用WP Control更新check_and_publish_future_post post的事件在wget 跑步。我可以从WP Control和post_status 转到publish. 如果我跑步wget 两次成功。第一个wget 花了一秒钟。第二次花了17秒,但在它运行check_and_publish_future_post 被解雇了。我将创建一个运行wget 好几次的睡眠陈述,这应该可以做到。

更新日期:6月27日,我的网站上的帖子计划7:00:XX. 所以我写了一个剧本wp-cron.php 10次,每次点击之间睡两秒钟,并在我的系统cron中启动7:01. 而且还是publish_future_post 没有开火。在启动脚本之前,我查看了WP Cron时间表,还有8个Cron事件等待启动。他们都开枪了。所以我去了Cloud9wp-cron.php 从那里开始。这导致publish_future_post 开火。唯一的变量是不同的ip和时区。据我所知,这些应该没有什么区别。这很令人费解。

2 个回复
SO网友:Gary Hall

Jetpack的站点地图cron事件就在我的publish_future_post; 这需要一些时间来运行(事实上,我发现在wp-cron.php, 再也回不来了wp-cron.php). 使用WP Crontol 我把它移到了后面publish_future_post, 和publish_future_post 被解雇了。我猜是在WP_CRON_LOCKOUT_TIMEOUT 其默认值的阈值60 secs 正在阻止publish_future_post 从开火开始。当我从Cloud 9中点击wp cron时,两分钟后publish_future_post 能够开火。

因此,虽然将WP-Cron的控制转移到系统Cron是一种公认的模式,但似乎它并不能解决WP-Cron的所有问题。我想我可以加一个sleep 60 在我的脚本中,每次点击之间都要克服cron事件不返回控制的问题wp-cron.php 但这样的脚本将是一个长期运行的脚本。如上所述,我无法将cron事件安排在前一个事件的30分钟内,因为这将违反我的主机cron策略。

因此,只要帖子从不安排在上午7:30或下午7:30,并且站点地图cron事件从不更改回其原始时间,我就应该很好了。

我会联系Automatic,看看他们怎么说。

SO网友:Gary Hall

具有WP CLI 我能够避免其他插件可能干扰publish_future 邮递

下面是一个perl 碎片在我的主机上webdir是$HOME/public_html bindir是/usr/bin. 注意使用--due-now. 只有那些当前等待被激发的钩子才会运行。还请注意,您需要cd 进入webdir或添加--path=path, 其中path是wordpress文件的路径(通常是webdir)。

# Post any scheduled posts ready to publish
my $cmd = "cd <webdir>; <bindir>/wp cron event run publish_future_post --due-now;
system($cmd);

# Run other cron events normally
$cmd = "cd <webdir>; <bindir>/php wp-cron.php";
system($cmd);
然后我将脚本设置为在1,31 在我的系统cron中,所有的帖子要么安排在一小时的顶部,要么安排在一小时的底部。

结束

相关推荐

Get posts by birthday

我正在开发一个博客网站,它是一个传记目录,我如何才能获得特定出生日期的帖子,以及如何获取今天出生日期的帖子。例如:在5月17日,may想要为5月17日出生的人展示传记帖子。并于5月18日为5月18日出生的人张贴传记。我附上了一张图片,还链接了一个具有类似功能的网站,我想知道如何做到这一点。 http://frostsnow.com/