wp_schedule_event и переход на летнее время

Итак, сегодня утром я столкнулся с проблемой на веб-сайте, который использует 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' );
}

Проблема довольно проста. Этот код работает нормально, по сути, я хочу запускать функцию в полночь по местному времени каждый день. Поэтому, когда я впервые запускаю функцию, она получает временную метку завтрашней полуночи по местному времени. И с тех пор функтино работает.

Теперь в эти выходные - из-за перехода на летнее время функция на самом деле никогда не переносится - она ​​просто настроена на запуск каждые 24 часа. Таким образом, функция начала работать в 23:00. Конечно, это легко исправить, но снова сломается. Я не могу найти хороших сообщений по теме - как бы вы справились с:

wp_schedule_event запускается ежедневно, когда меняется летнее время?

Просто чтобы предупредить очевидные ответы здесь: я не могу запустить правильный cron - это нужно сделать через wp. Наш хост его просто не поддерживает, это отстой, но это клиент. Любой совет будет принят с благодарностью!


person JBoss    schedule 05.11.2018    source источник
comment
Значит, вам нужно планировать события в зависимости от продолжительности светового дня?   -  person Bas van Dijk    schedule 05.11.2018
comment
Вы настроили UTC с часовым поясом Нью-Йорка в настройках WordPress (я думаю, это само по себе будет работать)?, WP Cron работает только при посещении пользователем. Если нет посещений в течение установленного времени, то он не запустится, а если какой-либо пользователь посетит после указанного времени, он сработает немедленно и установит следующее запланированное время, поэтому вы не ожидаете результата, такого как cron сервера, надеюсь, вы уже знаете?   -  person Vignesh Pichamani    schedule 05.11.2018
comment
Мне не нужно планировать его на основе дневного света, мне нужно, чтобы он работал в полночь по МЕСТНОМУ ВРЕМЕНИ независимо от дневного света. Часовой пояс настроен правильно - И у меня есть настройка пинга, чтобы попасть на сервер в нужное время для запуска этого cron, я все это понимаю. Проблема в том, что сам cron должен запускаться каждые 24 часа с момента его первой установки. Этот 24-часовой обратный отсчет должен ИЗМЕНЯТЬСЯ при изменении часового пояса, чтобы продолжать работать в полночь.   -  person JBoss    schedule 04.02.2019


Ответы (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 часа. Надеюсь, это поможет кому-то!

person JBoss    schedule 08.03.2019