WP Cron锁定是如何实现的?

时间:2012-12-03 作者:Tom J Nowell

WordPress采取措施确保cron任务不会在应该运行一次的时候运行两次,例如,在给出每小时一次的计划时,每小时运行一次,而不是在计划的时间偶尔运行两次。

虽然它不是万无一失的,但WordPress采取了哪些步骤来确保它在预定的时间发生,并且只按规定发生一次?

2 个回复
最合适的回答,由SO网友:onetrickpony 整理而成

设置瞬态以反映cron的状态,当所有任务完成时,cron将被删除。如果找到瞬态,则忽略任何后续请求。。。

SO网友:Alexander Garden

onetrickpony的答案基本上是正确的。如果您让WordPress执行其默认操作,或者通过在GET字符串中将“do\\u wp\\u cron”设置为唯一值来获取其URL来手动触发wp cron,那么您可以可靠地预期不会执行两次作业。

但如果执行wp cron。从crontab中的php-CLI来看,情况有所不同。现在,它将检查一个名为WP\\u CRON\\u LOCK\\u TIMEOUT的常量,以确定是否应该忽略瞬态中存储的锁。还有一个竞争条件,使得同一个作业有时可以运行两次。

如果您确实想确保同一个作业不会执行两次,请不要设置DISABLE\\u WP\\u CRON或在crontab中使用curl或wget来获取WP CRON。php类似:

*/10 * * * * wget -q -O "http://www.example.com/wp-cron.php?doing_wp_cron=`date +\\%s.\\%N`" > /dev/null 2>&1
还请注意bug in 3.3 如果有两个wp cron实例,则会导致作业运行两次。php也在同一秒内启动。现在,它们需要在同一微秒内发射,这仍然是可能的,但极不可能。

结束

相关推荐

插件中的Cron作业不起作用

我写了一个插件,可以将帖子转换为excel格式,然后通过电子邮件发送。xls到电子邮件id。我可以在函数中声明函数时使用它。php,但不能使用插件文件中定义的函数。if ( ! wp_next_scheduled( \'xls_func_hook1\' ) ) { wp_schedule_event( time(), \'hourly\', \'xls_func_hook1\' ); } add_action( \'xls_func_hook1\', \'sendxl