Запускайте 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, я не могу проверить это для другого часового пояса

Author: Xaver, 2013-01-25

1 answers

Почти,

Задания WP Cron не выполняются в определенное время, они являются приблизительными, и все временные метки должны быть UTC, как в WordPress всегда сделки в метках времени UTC. Если вам нужна полночь по восточному времени, вам нужно указать 8 вечера по Гринвичу.

Также, например, ваш приведенный выше код предполагает полночь по восточному времени, но он может не выполняться в полночь по восточному времени. Если никто не посетит сайт в указанное время, и до того, как кто-то прибудет, пройдет 4 часа, то задание cron будет выполнено в 4 утра.

Если вам нужны точные задания cron, которые не являются приблизительными, вам потребуется настроить задание cron сервера для вызова URL-адреса wp cron с фиксированными интервалами.

Я бы также выбрал более конкретное имя, чем "cron_hook", чтобы предотвратить столкновения и проблемы в будущем

Вы можете легко проверить это, просто выяснив, во сколько полночь по тихоокеанскому времени в UTC, то есть в 8 утра, срабатывает ли ваш cornjob в 8 утра по UTC?

 1
Author: Tom J Nowell, 2013-01-25 12:05:53