Как тестировать wp_cron?

11 апр. 2011 г., 00:27:26
Просмотры: 23K
Голосов: 29

Это вроде бы глупый вопрос...

Я запланировал действие для выполнения каждый час:

if(!wp_next_scheduled('my_hourly_events'))
  wp_schedule_event(time(), 'hourly', 'my_hourly_events');

add_action('my_hourly_events', 'the_function_to_run');

function the_function_to_run(){
   echo 'it works!'; 
}

Как я могу протестировать, что это работает, не ожидая час? :)

Я пробовал добавить wp_clear_scheduled_hook('my_hourly_events'); перед этим кодом и добавить wp_cron() после, но я не вижу, чтобы моя функция выполнялась...

редактирование:

ок, я добавил trigger_error() внутрь моей функции, проверил лог ошибок apache, и там это есть :)

Теперь я еще больше в замешательстве:

  • Как может wp-cron работать в фоновом режиме? потому что очевидно это происходит, если я не вижу вывода...

  • это, похоже, не работает в контексте объекта; почему?

3
Комментарии

ок, я выяснил, что wp-cron.php выполняется с помощью wp_remote_post(). это всё объясняет...

onetrickpony onetrickpony
11 апр. 2011 г. 02:33:18

Под "контекстом объекта" ты имеешь в виду, что твой callback выглядит как array( &$this, 'my_method_name' )? Это действительно не будет работать, потому что имя функции сохраняется в базе данных для выполнения позже. &$this ссылается на конкретный объект, а не на имя класса, и этот объект не будет существовать при следующем запросе, когда cron-задача выполнится. Статический метод класса должен работать.

Jan Fabry Jan Fabry
11 апр. 2011 г. 12:34:30

да, мне пришлось сделать свою функцию статической. я не думал, что wp будет удалённо запускать локальный скрипт как "cron"

onetrickpony onetrickpony
11 апр. 2011 г. 20:05:12
Все ответы на вопрос 2
2
22

Мой любимый плагин для этого — Core Control, который имеет отличный модуль для отображения информации о кроне: какие события настроены, когда они будут выполнены в следующий раз и т.д.

Если хотите разобраться на более глубоком уровне, посмотрите функцию _get_cron_array(), которая возвращает внутренние данные о событиях крона (верхний уровень ключей содержит временные метки).

11 апр. 2011 г. 08:37:26
Комментарии

логирует ли HTTP Access Logger все запросы или только те, которые сделаны через HTTP API WordPress? Это отлично подходит для поиска запросов, которые делают плагины, и понимания, почему ваша страница грузится медленно :)

onetrickpony onetrickpony
11 апр. 2011 г. 20:12:30

@One Trick Pony не уверен, но логично предположить, что только через API

Rarst Rarst
11 апр. 2011 г. 20:27:14
0

wp-cli — это еще один способ:

Список событий

> wp cron event list
+-------------------+---------------------+-----------------------+---------------+
| hook              | next_run_gmt        | next_run_relative     | recurrence    |
+-------------------+---------------------+-----------------------+---------------+
| wp_update_plugins | 2020-04-14 08:11:38 | 7 часов 24 минуты     | 12 часов      |
| wp_update_themes  | 2020-04-14 08:11:38 | 7 часов 24 минуты     | 12 часов      |
| wcsc_prime_sites  | 2020-04-14 17:00:55 | 16 часов 13 минут     | 1 день        |
+-------------------+---------------------+-----------------------+---------------+

Запланировать событие

> wp cron event schedule wp_update_plugins "now +5 seconds"
Успех: Событие с хуком 'wp_update_plugins' запланировано на 2020-04-14 00:43:54 GMT.

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

Запуск напрямую в терминале

> wp cron event run wcsc_prime_sites
Событие крона 'wcsc_prime_sites' выполнено за 0.805s.
Успех: Выполнено всего 1 событие крона.

Важно учитывать, что wp-cli работает в контексте wp-admin, а WP Cron запускается на фронтенде. Обычно это не проблема, но при написании задач убедитесь, что вы подключаете (require()) любые файлы из wp-admin/includes, которые ожидает ваш код.

Если этого не сделать, задача будет работать корректно в wp-cli, но при обычном запуске вызовет фатальную ошибку.

Другие команды

Выполните wp help cron для получения дополнительной информации.

14 апр. 2020 г. 03:59:10