Мониторинг и управление WP-Cron заданиями в WordPress
«Cron» — это команда для старта заданий на сервере. Они выполняются по расписанию. Либо в конкретный час и минуту, либо по определенному интервалу. Задания «WP-Cron» не включаются автоматически. Во время любой загрузки страницы когда кто то зашел на сайт, каждое задание сопоставляется с настоящим временем и если оно уже наступило, задание начнет выполняться. Однако, если у вас запланировано задание на 04:01, при этом посещений на сайте в это время мало, то вероятно, задание выполнится с отклонением от графика. Мониторинг и управление WP-Cron заданиями в WordPress выполняется из административной части сайта. К примеру: публикация запланированных записей, мониторинг обновлений CMS и прочее происходит 2 раза в день. Далее мы детальней рассмотрим возможности планировщика заданий.
Тестируем работу WP-Cron у вас на сайте и чиним его, если есть проблемы
Чаще всего мониторинг и управление WP-Cron заданиями в wordpress проходит без проблем. Однако бывают случаи, когда что-то не работает. Предлагаем проверить это на своем сайте.
Зайдите в редактор записей, создайте новую, добавьте в нее минимальное количество текста и заголовок, можно всяческую абракадабру и отсебятину. Главное, чтобы эту статью можно было сохранить и запланировать. Над кнопкой «Опубликовать» вы можете увидеть ссылку «Изменить».
Перейдите по ней и вы сможете запланировать публикацию, выставив время на несколько минут вперед. Затем нажмите «Оk»
Таким образом, публикация запланируется.
Если с планировщиком у вас все хорошо, то статья непременно опубликуется в заданное время. Иначе вы увидите:
Если у вас все прошло гладко и статья опубликовалась в правильное время, то следующую главу можете не читать.
Фиксим WP-Cron
Какие следующие шаги следует предпринять, если WP-Cron не справляется со своими обязанностями? Вот, первая помощь:
Зайдите в файл wp-config.php и убедитесь нет ли там строчки, которая отключает планировщик define('DISABLE_WP_CRON', true);
Обнаружив его – удалите. Проведите эксперимент снова. Но если в файле wp-config.php строка с define('DISABLE_WP_CRON', true);
отсутствует, то нужно попытаться подключить другую конфигурацию планировщика, поэтому вставляем туда другой код:
define('DISABLE_WP_CRON', true); define('ALTERNATE_WP_CRON', true);
Если и этого оказалось недостаточно, то попробуйте поработать с системой Cron на вашем хостинге. Попробуем деактивировать виртуальный WP-Cron. Снова вводим код:
define('DISABLE_WP_CRON', true);
В хостинге вам попробуйте отыскать подходящий инструмент для Cron. Перейдите туда и в поле, которое чаще всего звучит как «Команда для выполнения» прописываем адрес вашего файла wp-cron.php
на сайте, где вместо sitename.ru нужно вставить адрес вашего сайта:
wget -O /dev/null http://sitename.ru/wp-cron.php?doing_wp_cron
Безрезультатно? Смело обращайтесь в техподдержку хостинга, ведь чаще всего баги с виртуальным WP-Cron случаются на сервере. Но столкнувшись с некомпетентностью и бездействием, переносите сайт на более приличный хостинг.
Как настроить мониторинг и управление WP-Cron заданиями в WordPress
Команды для выполнения задач с WP-Cron
- wp_schedule_single_event() — запланировать выполнение задания в конкретное время;
- wp_schedule_event() — создать задание, которое будет выполняться через определенные интервалы;
- wp_unschedule_event() — исключить указанную задачу из планировщика
- wp_clear_scheduled_hook() — исключить из списка задач события, связанные с определенным хуком
- wp_next_scheduled() — установить следующее время выполнения определенного хука
Но вместо работы с кодом мы советуем воспользоваться для планирования задач плагином. Так как все манипуляции с системой WP-Cron относительно сложные и вмешательство в код не рекомендуется, если пользователь не обладает хорошим запасом знаний и опытом работы в этой тематике.
А в самом “ядре” системы управления сайтом, к сожалению, нет комфортного для пользователя управления планированием заданий. Тут нам может помочь плагин “WP Control”.
Настройка заданий с помощью плагина
Установив и активировав “WP Control”, в боковом меню административной части сайта откройте раздел “Инструменты” => “Cron Events”. После чего вы попадете на страницу со списком всех запланированных Cron-ивентов. Выглядеть это может так:
В первом столбце таблицы отображается наименование хука, который дает зеленый свет планировщику. Благодаря такой номенклатуре можно легко понять, что означает та или иная задача. Наверное вы заметили, что немало хуков начинаются с сочетания символов wp_ :
Видно, что большинство WordPress-хуков начинаются с префикса “wp_”, например, wp_update_plugins или wp_privacy_delete_old_export_files. В столбце “Next Run”можно узнать, когда? во сколько и с какой периодичностью запускаются задания. В конце каждого хука администратор сайта сможет решить его дальнейшую судьбу. Стоит ли задание удалить вовсе, изменить параметры, а если все в порядке, то запустить. Однако, указанные в примере задания являются стандартными в WP. Это значит, что вмешательство в цикл их работы может негативно сказаться на работе сайта.
Изменение расписаний задач
Если кликнуть по кнопке “Edit”, то автоматически откроется вкладка “Modify Cron Event”. В ней сможете изменить расписание. К примеру, если событие “wp_update_plugins” запускалось “каждые 12 часов”, то этот параметр можно изменить на “каждый день”, то есть каждые 24 часа и т.д.
Чтобы сохранить настройки, нажмите синюю кнопку внизу “Modify Cron Event”.
Добавить новую задачу
Чтобы добавить новую задачу, здесь же откройте вкладку “Add Cron Event”
- Для начала, новому хуку следует дать имя. Вводим название в поле “Hook Name”, при этом нельзя использовать спецсимволы и пробелы.
- Параметры новой задачи указываем в поле “Arguments (optional)”.
- В поле “Next Run”указываем время старта задания, а периодичность в “Recurrence“
Не забудьте сохраниться, нажав на синюю кнопку “Add Cron Event”, но чтобы корректно завершить все настройки, добавьте в файл “functions.php” свой хук и функцию, которая будет запускаться при выполнении задачи.
if ( ! wp_next_scheduled( 'wpschool_custom_cron' ) ) { wp_schedule_event( time(), 'hourly', 'my_task_hook' ); } add_action( 'wpschool_custom_cron', 'wpschool_custom_cron_func' ); function wpschool_custom_cron_func() { wp_mail( 'username@mail.ru', 'Автоматическое письмо', 'Текст автоматического письма' ); }
Функция в примере отправляет простое письмо на указанный адрес.