【问题标题】:wp_schedule_event and Daylight Savingswp_schedule_event 和夏令时
【发布时间】:2019-04-09 00:52:47
【问题描述】:

所以今天早上我在一个使用 WP Cron 的网站上遇到了一个问题。代码如下所示:

//Schedule the cron to run if not scheduled
if ( ! wp_next_scheduled( 'my_check_cron_event' ) ) {
    wp_schedule_event( strtotime('tomorrow America/New_York') , 'daily', 'my_check_cron_event' );
}

问题很简单。该代码工作正常,基本上我想每天在当地时间午夜运行该函数。因此,当我第一次运行该函数时-它会获取明天午夜的时间戳-当地时间。从那以后 - functino 一直在运行。

现在这个周末 - 由于夏令时,该功能实际上并没有得到 RESCHEDULED - 它只是设置为每 24 小时运行一次。所以函数在晚上 11 点开始运行。当然这很容易修复 - 但只会再次破坏。我真的找不到任何关于这个主题的好帖子 - 你会如何处理:

wp_schedule_event 在夏令时更改时每天运行?

只是为了抢占一个明显的答案:我无法运行正确的 cron - 它需要通过 wp.我们的主机根本不支持它,它很烂 - 但那是客户。任何建议将不胜感激!

【问题讨论】:

  • 所以您需要根据日光存在的时间来安排活动?
  • 您是否在 wordpress 设置中使用纽约时区配置了 UTC(我认为这本身会起作用)?WP Cron 仅在用户访问时工作。如果在规定的时间内没有访问,则它不会运行,如果在该时间之后有任何用户访问,它将立即触发并设置下一个预定时间,因此您不会期望像服务器 cron 这样的结果,希望您已经知道了吗?跨度>
  • 我不需要根据日光安排它,我需要它在当地时间午夜运行,而不管日光如何。时区配置正确 - 我有一个 ping 设置,可以在正确的时间点击服务器来运行这个 cron,我明白这一切。问题是 cron ITSELF 计划每 24 小时运行一次 - 从它第一次设置时开始。当时区更改时,需要更改 24 小时倒计时 - 以在午夜继续运行。

标签: wordpress cron dst


【解决方案1】:

因此,对于遇到此问题的任何人,我今天必须回到这个问题上来寻求永久解决方案 - 因为夏令时即将改变!这里的根本问题是 wp_schedule_event - 接受一个参数,该参数距离下一次运行还有几秒钟。该参数被保存到 cron 数组中——它真的不在乎你在哪个时区。它只是在那个时间间隔内运行。为了解决这个问题 - 我不得不切换到 wp_schedule_single_event。

这似乎违反直觉,因为我们希望它在间隔上运行。但不同的是 - 我们需要重新计算下一个时间戳以运行:

if ( ! wp_next_scheduled( 'my_check_cron_event' ) ) {
   wp_schedule_single_event( strtotime('tomorrow America/New_York'), 'my_check_cron_event' );
}

这里的区别是 strtotime() 每天都会获得正确的时间戳 - 考虑夏令时,而不是简单地每 24 小时运行一次。希望对某人有所帮助!

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 2016-02-02
    • 2010-09-19
    • 2017-04-29
    • 2016-10-11
    • 2021-06-22
    • 2014-02-22
    • 1970-01-01
    • 2013-10-13
    相关资源
    最近更新 更多