Как работает WordPress Cron

Опубликовано: 2021-12-03

Вы когда-нибудь задумывались, что такое WP-Cron? Если да, то это идеальная статья для вас, чтобы узнать все, что вам нужно знать о запланированных задачах WordPress.

Cron (Command Run On) — это утилита, запущенная в системах UNIX и позже развитая в дистрибутивах LINUX, которая была предложена в качестве планировщика заданий на основе времени.

Задание cron — это задача, которая выполняется повторно или как разовая задача. На протяжении многих лет он в основном использовался как инструмент системного администрирования для автоматического запуска задач.

WordPress Крон

Во время работы веб-сайта WordPress в фоновом режиме выполняются некоторые задачи, которые необходимо выполнять периодически, например, проверка обновлений тем и плагинов, запланированные публикации, переходы, которые необходимо удалить, и многое другое. Эти запланированные задачи на основе времени обрабатываются WP-Cron.

В вашей установке WordPress файл, связанный с заданиями cron, — это файл wp-cron.php , расположенный в корневой папке вашей установки.

Файл wp-cron.php содержит код автоматизированных задач, связанных с обновлениями и сообщениями.

Как это работает

WP-Cron проверяет список задач при каждой загрузке страницы и выполняет соответствующие действия.

Если в момент загрузки страницы задача должна быть выполнена, она добавляется в очередь. Таким образом, WordPress гарантирует, что даже соответствующие события будут запущены, а не пропущены, и в конечном итоге все задачи будут выполняться при загрузке этой страницы.

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

Итак, рассмотрим, что делает WordPress в качестве обходного пути в этой ситуации. Однако у этого есть некоторые недостатки, которые мы рассмотрим через некоторое время.

Плагин WP-Crontrol

Отличный и простой способ просмотреть список заданий cron на вашем веб-сайте WordPress — установить плагин WP-Crontrol.

После его активации вы можете просмотреть страницу администратора плагина в пункте меню Tools->Cron Events. В ванильной установке вы увидите что-то вроде этого:

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

Например, на экране редактирования события wp_update_themes вы можете изменить его настройки.

В пункте меню «Настройки» -> «Расписания Cron» вы можете просмотреть расписания по умолчанию и, если хотите, добавить свое собственное и дать ему имя для просмотра в списке.

Как создать задание Cron

Чтобы добавить задание cron вручную, все, что вам нужно сделать, это отредактировать файл functions.php темы. Чтобы продемонстрировать простой пример, откройте его в своем любимом редакторе и добавьте следующий фрагмент кода:

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); }

Где «my_cronjob» — это имя вашего хука, а «my_cronjob_function» — это имя вашей функции, которая просто отправит электронное письмо на указанный вами адрес, заменив EMAIL_ADDRESS на нужный.

Затем нам нужно запланировать выполнение этого хука в желаемое время.

Как выполнить задание один раз

Чтобы выполнить действие как одноразовое задание WP-Cron, мы должны использовать встроенную функцию WordPress wp_schedule_single_event(), предназначенную для запуска хука в указанное время. Его структура такова:

wp_schedule_single_event( $timestamp, $hook, $args, $wp_error )

Где $timestamp — это временная метка Unix для следующего запуска события, а $hook — это хук действия, который нужно выполнить при запуске события.

Оба эти параметра являются обязательными. Теперь поговорим о необязательных параметрах.

С параметром $args вы можете использовать массив, содержащий аргументы, для передачи функции обратного вызова хука. Каждое значение в массиве передается обратному вызову как отдельный параметр. Ключи массива игнорируются.

Параметр $wp_error можно использовать для возврата WP_Error в случае сбоя. Его значение по умолчанию равно false.

Соответствующий код в нашем файле functions.php будет таким:

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } wp_schedule_single_event( time() + 3600, 'my_cronjob' );

На этом этапе вы должны увидеть свою пользовательскую задачу в списке.

Как запустить задание как повторяющееся событие

Для этого сценария WordPress предоставляет функцию wp_schedule_event(), которая структурирована следующим образом.

wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error)

Параметр $timestamp — это необходимая временная метка Unix для следующего запуска события, $recurrence — это строка, также необходимая для того, как часто событие должно впоследствии повторяться, а $hook — это хук действия, который выполняется при запуске события.

Необязательные параметры $args и $wp_error такие же, как и раньше.

Код, который запускает задание с периодичностью, скажем, 1 час, таков:

 add_action('my_hourly_cronjob', 'hourly_action'); function hourly_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_hourly_cronjob' )) { wp_schedule_event(time(), 'hourly', 'my_hourly_cronjob'); }

Мы использовали функцию wp_next_scheduled() в операторе if, как вы видите выше, чтобы избежать дублирования событий и убедиться, что задача еще не запланирована, прежде чем продолжить и запустить ее.

Мы также использовали метку «почасово» из запланированной таблицы в разделе «Настройки» -> «Расписания Cron». Если нам нужно другое событие, скажем, каждые 45 минут, мы должны сначала создать собственное расписание Cron с именем «45_minutes», а затем использовать его в коде.

 add_action('my_45_cronjob', 'my_45_action'); function my_45_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_45_cronjob' )) { wp_schedule_event(time(), '45_minutes', 'my_45_cronjob'); }

На этом этапе вы должны увидеть свою пользовательскую задачу в списке с ожидаемыми изменениями:

Недостатки WP-Cron

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

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

Разместите свой сайт с Pressidium

60- ДНЕВНАЯ ГАРАНТИЯ ВОЗВРАТА ДЕНЕГ

ПОСМОТРЕТЬ НАШИ ПЛАНЫ

В случае с популярным сайтом у вас будет большой трафик из-за одновременного выполнения большого количества задач. Это может привести к потреблению ресурсов вашего сервера и снижению производительности или даже к простою вашего веб-сайта.

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

Отключить WP-Крон

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

Если отключение WP-Cron не предусмотрено вашим хостинг-провайдером, вы можете сделать это самостоятельно.

Откройте файл wp-config.php , расположенный в корневой папке вашей установки, с помощью вашего любимого редактора и найдите строки, относящиеся к префиксу таблицы базы данных. Сразу после вставьте эту строку:

 // /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wN0b9WQk_'; define('DISABLE_WP_CRON', 'true');

Это обязательно, если вы хотите использовать более стабильный планировщик, такой как служба Linux cron, чтобы запускать wp-cron.php в любое удобное для вас время.

Серверное решение: служба Linux Cron

В Pressidium мы используем Linux Crontab для запуска WP-Cron каждые 5 минут. Это правильное количество времени, которое гарантирует своевременное выполнение запланированных заданий и в то же время позволяет избежать перегрузки вашего веб-сайта WordPress. Это не мешает планировщику WP-Cron, а только механизму запуска.

Вывод

Надеюсь, эта статья помогла вам познакомиться с WordPress Cron, узнать, что это такое и как он работает, а также как создавать собственные расписания и задачи. Дважды подумайте, подходит ли WP-Cron для ваших требований, прежде чем выбирать другие серверные решения.