5

我正在使用 WP Cron 从插件安排网络范围的 cron。

无论从哪个博客激活它,我都想每小时运行一次 cron。最重要的是,我需要防止 cron 从网络上的不同站点多次运行。

有没有办法使用 WordPress 调度系统进行设置?

4

2 回答 2

4

多站点上的 wp-cron 依赖于(子)域,因此每个实例都是独立的。因此,来自 a.site.com 的调用与来自 b.site.com 的调用是完全独立的实例

这意味着,如果激活 cron 的代码可以从该网络中的任何站点运行,则默认情况下,当您在多个实例上运行插件时,无法阻止它在每个网络上运行多次。

有几种方法可以解决这个问题:

1)(这是未经测试的,但我认为它可能有效)您可以在 wp-config 中定义一个名为 WP_CRON_LOCK_TIMEOUT 的常量,您可以将其定义为 3600。这意味着所有cron 进程只能每小时运行一次。不确定这是否是您所追求的选择。

2) 停止 wp-cron 自行运行,然后设置服务器 cron 作业以在 crontab 中每小时触发一次 wp-cron。你会定义('DISABLE_WP_CRON', true); 在 wp-config 然后在 crontab 中执行 curl http://site.com/wp-cron.php 以每 3600 秒运行一次(或 wget 而不是 curl)

3) 您可以设置一个网络范围的站点选项,该选项在 wp-cron 每小时首次运行时更新。您需要在运行 cron 作业的脚本中构建一个检查以获取此选项,并查看存储的时间是否少于 3600 秒前。如果是,则不要让 cron 运行。如果不是,则运行 cron 并使用当前时间更新站点范围的选项。(参见 add_site_option() update_site_option() 和 get_site_option() 本质上与它们的单站点对应物相同,但在网络范围内)

4) 有一个“高级”插件,它基本上会产生一个 PHP 后台进程,该进程独立于访问您网站的任何人运行。默认情况下,它每 60 秒运行一次,但很容易更改它。http://codecanyon.net/item/improved-cron/176543

wp-cron.php 并没有真正为您提供任何操作或过滤器,它确实设置了您可能会尝试测试的瞬态,但我认为这不是前进的方向。

有一些非常有用(免费)的 cron 插件:

http://wordpress.org/extend/plugins/wp-crontrol/

http://wordpress.org/extend/plugins/wp-cron-control/

http://wordpress.org/extend/plugins/cron-view/

于 2013-03-08T16:42:31.647 回答
4

试试这个:

http://www.lucasrolff.com/wordpress/why-wp-cron-sucks/

这个简单的解决方案对我有用。

只需按照第 2 部分。

于 2013-11-01T09:43:59.433 回答