Wordpress多站点网络宽Cron调度

时间:2013-03-08 01:41:39

标签: wordpress cron wpmu

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

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

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

2 个答案:

答案 0 :(得分: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。你做的 define('DISABLE_WP_CRON',true); 在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/

答案 1 :(得分:4)

试试这个:

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

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

请遵循第2部分。