Запускайте cron каждые 24 часа по Гринвичу -8
Мне нравится запускать cron каждые 24 часа в полночь по восточному времени (= GMT -8)
Вот что у меня есть
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, я не могу проверить это для другого часового пояса
1 answers
Почти,
Задания WP Cron не выполняются в определенное время, они являются приблизительными, и все временные метки должны быть UTC, как в WordPress всегда сделки в метках времени UTC. Если вам нужна полночь по восточному времени, вам нужно указать 8 вечера по Гринвичу.
Также, например, ваш приведенный выше код предполагает полночь по восточному времени, но он может не выполняться в полночь по восточному времени. Если никто не посетит сайт в указанное время, и до того, как кто-то прибудет, пройдет 4 часа, то задание cron будет выполнено в 4 утра.
Если вам нужны точные задания cron, которые не являются приблизительными, вам потребуется настроить задание cron сервера для вызова URL-адреса wp cron с фиксированными интервалами.
Я бы также выбрал более конкретное имя, чем "cron_hook", чтобы предотвратить столкновения и проблемы в будущем
Вы можете легко проверить это, просто выяснив, во сколько полночь по тихоокеанскому времени в UTC, то есть в 8 утра, срабатывает ли ваш cornjob в 8 утра по UTC?