我正在使用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自身运行,然后在crontab中设置一个服务器cron作业,每小时启动一次wp-cron。你会做define('DISABLE_WP_CRON', true);在wp-config中,然后在crontab中执行acurl 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并没有真正给你任何动作或过滤器,它确实设置了你可能会尝试测试的瞬态,但我不认为这是前进的方向。
有一些非常有用的(免费)插件:
http://wordpress.org/extend/plugins/wp-crontrol/http://wordpress.org/extend/plugins/wp-cron-control/http://wordpress.org/extend/plugins/cron-view/试试这个:
http://www.lucasrolff.com/wordpress/why-wp-cron-sucks/这个简单的解决方案对我很有效。