我喜欢每24小时在太平洋标准时间午夜运行一次cron
这就是我所拥有的
if ( !wp_next_scheduled( \'cron_hook\' ) ) {
//reset on 00:00 PST ( GMT -8 ) == GMT +16
$timeoffset = strtotime(\'midnight\')+((24-8)*HOUR_IN_SECONDS);
if($timeoffset < time()) $timeoffset+(24*HOUR_IN_SECONDS);
wp_schedule_event($timeoffset, \'daily\', \'cron_hook\');
}
这会将每日cron设置为格林尼治时间午夜8点(24-8),如果已经存在,则将其推迟24小时,以便在创建时不会触发cron。
我的这种做法是正确的还是遗漏了什么?
我已经测试过了,但由于我的服务器运行的是GMT+0,所以我无法验证其他时区的情况
最合适的回答,由SO网友:Tom J Nowell 整理而成
几乎
WP Cron作业不在特定时间运行,它们是近似的,所有时间戳都应该是UTC,如WordPressalways 以UTC时间戳进行交易。如果您想要午夜太平洋标准时间(PST),则需要指定晚上8点UTC。
另外,例如,上面的代码建议PST午夜运行,但它可能不会在PST午夜运行。如果没有人在指定的时间访问该站点,并且在有人到达之前还有4个小时,那么cron作业将在凌晨4点进行。
如果您希望获得不近似的准确cron作业,则需要设置服务器cron作业,以固定间隔调用wp cron URL。
我也会选择一个比“cron\\u hook”更具体的名字,以防止将来发生冲突和问题
你可以很容易地测试这一点,只需计算出太平洋标准时间午夜在UTC的时间,也就是上午8点,你的cornjob在UTC上午8点点火吗?