我正在使用 WP Cron 从插件安排网络范围的 cron。
无论从哪个博客激活它,我都想每小时运行一次 cron。最重要的是,我需要防止 cron 从网络上的不同站点多次运行。
有没有办法使用 WordPress 调度系统进行设置?
多站点上的 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/