WordPress 多站点上的网络范围的 Cron 调度

Posted

技术标签:

【中文标题】WordPress 多站点上的网络范围的 Cron 调度【英文标题】:Network Wide Cron Scheduling on Wordpress Multisite 【发布时间】:2013-02-23 11:36:47 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

2) 停止 wp-cron 自行运行,然后在 crontab 中设置一个服务器 cron 作业以每小时触发一次 wp-cron。你会做的 定义('DISABLE_WP_CRON',真); 在 wp-config 中,然后在 crontab 中执行 卷曲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/

【讨论】:

暂时我将使用选项 3 设置站点瞬态而不是站点选项。不过我也会探索第一个选项。非常感谢!【参考方案2】:

试试这个:

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

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

只需按照第 2 部分操作即可。

【讨论】:

以上是关于WordPress 多站点上的网络范围的 Cron 调度的主要内容,如果未能解决你的问题,请参考以下文章

wordpress 多站点同时注销所有网络站点

php 在WordPress多站点网络中获取主站点的博客ID

PHP Wordpress 3多站点网络

清理多个编号的mysql表[关闭]

sh Ubuntu服务器CRON脚本:重新启动服务器,备份数据库,备份Wordpress站点文件,备份清理,Ubuntu服务器日志轮换计划

Docker wordpress 多站点 - 要公开哪些端口?