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 调度的主要内容,如果未能解决你的问题,请参考以下文章
php 在WordPress多站点网络中获取主站点的博客ID
sh Ubuntu服务器CRON脚本:重新启动服务器,备份数据库,备份Wordpress站点文件,备份清理,Ubuntu服务器日志轮换计划