Сегодня мы изучим функции WP-Cron — планировщика задач в WordPress, о котором имеется не так много информации. Основная цель WP-Cron: настройка планирования, а также выполнение различных зависящих от времени задач. Мы изучим некоторые приемы его использования, рассмотрим потенциальные проблемы, с которыми можно столкнуться в ходе работы, а также взглянем на то, как обойти разные сложности.
WordPress – мощное программное обеспечение. Его простота зачастую можно производить неправильное впечатление на пользователей, обладающих поверхностными техническими навыками – люди могут думать, что с этой системой очень легко работать. Возможно, что это послужило на благо WordPress, поскольку то, что кажется простым и легким, чаще всего используется массами. Однако стоит помнить, что WordPress – очень мощная система, и она способна выполнять задачи на порядок сложнее тех, что выставляются к блоггингу.
Одна из возможностей WordPress, о которой написано не так много статей – это WP-Cron. Те из вас, кто работал с Cron в Linux, знают, как работает эта функция.
Что такое Cron?
Cron – это команда UNIX, созданная для того, чтобы планировать задачи. Зачастую cron используется для планировки периодически выполняемых задач. Скажем, вы могли бы использовать функцию cron для отправки ежедневных уведомлений. Cron – это процесс-демон; это означает, что он работает постоянно, ожидая определенных событий.
Как работает Cron
Поскольку WordPress ставится на самые разные системы, разработчикам WordPress пришлось для корректного выполнения задач внедрить псевдо-cron, включающий в себя функции WP-Cron, которые помогают выполнять следующие действия:
- Проверка обновлений плагинов и тем
- Публикация запланированных записей
- Отправка уведомлений
- И многое другое!
В отличие от обычных cron задач, которые выполняются в определенное время в зависимости от настроек сервера, функция WP-Cron запускается всякий раз, когда кто-либо посещает веб-сайт на базе WordPress. Это позволяет сайту корректно работать на самых разных серверах, поскольку WP-Cron помогает устранить большую часть специфичных для сервера требований. При каждой загрузке страницы WordPress проверяет, требуется ли запускать WP-Cron. Если имеется такая необходимость, то WordPress пытается отправить запрос через HTTP к файлу wp-cron.php.
Причина вызова wp-cron.php заключается в том, что некоторые задачи могут потребовать значительного времени выполнения; но пользователь, запрашивающий WP-страницу, не может долго ждать. Вызов wp-cron.php помогает сохранить функцию WP-Cron запущенной — в виде отдельного фонового процесса, что не приводит к задержке загрузки страницы для пользователей. Как только функция WP-Cron запущена, она будет выполняться до тех пор, пока все необходимые задачи не будут завершены, либо пока не пройдет определенное время выполнения, заданное в конфигурации сервера.
В зависимости от настроек вашего веб-хоста, WP-Cron может провалить завершение задач, или даже вообще не работать. Сайты с высоким трафиком сталкиваются с еще одним списком проблем, включающим в себя запуск многочисленных WP-Cron процессов в цикле. Большая часть людей винит во всех грехах WordPress, хотя проблема не всегда кроется в WP. Каждая ситуация различна. Нужно анализировать все условия, чтобы уже на их основе настроить WordPress для идеальной работы. Далее мы покажем, с какими проблемами чаще всего сталкиваются пользователи, и как решить эти проблемы.
Некоторые проблемы с WP-Cron
Проблема первая: Запуск нескольких WP-Cron процессов на сайтах с высоким трафиком.
Если вы являетесь администратором сервера или обслуживаете свой собственный сервер с установленным файрволом, вы, скорее всего, получали письма от файрвола о файле wp-cron.php, работающего в течение долгого периода времени. Это происходит, когда время выполнения скрипта задано больше 60 секунд. Поскольку процесс не завершается, и запускаются новые процессы, получается нехорошая ситуация с несколькими запущенными экземплярами процесса WP-Cron.
Этого не бывает на сайтах с низким уровнем трафика, однако если на ваш WP-сайт в некоторый промежуток времени одновременно зайдут пользователи, и максимальное время выполнения скрипта будет установлено слишком высоким, то в таком случае могут запуститься несколько экземпляров функции WP-Cron. До недавней версии WordPress постоянно происходили проблемы с вызовом многократных cron-процессов для одних и тех же событий.
Примечание: в WP 3.3 появилась улучшенная блокировка Cron. Эта статья была написана еще тогда, когда WP 3.3 только планировался. В версии 3.3, напоминаю, появилась улучшенная блокировка cron, а также обход ошибки вызова многочисленных WP-Cron процессов для событий.
Проблема вторая: запланированные записи не публикуются.
Другая популярная проблема, о которой сообщали многие хостинг-провайдеры и владельцы сайтов с очень низким уровнем трафика – отсутствие публикации запланированных записей. Функция WP-Cron запускается только при запросе страницы, поэтому если нет запросов, то и запланированные задачи не выполняются.
Примечание: это проблема не с WP. Начиная с версии 3.x, эта проблема практически не встречается. На данный момент существует много плагинов, которые позволяются справиться с этой неприятностью.
Проблема третья: WP-Cron не работает
Опять же, эта проблема связана с настройками сервера. В результате неправильно подобранных настроек файрвол блокирует выполнение необходимых для запуска WP-Cron скриптов.
Возможное решение популярных проблем с WP-Cron
Чтобы избежать появления многократных экземпляров WP-Cron, запущенных на вашем сервере для одного сайта, можно использовать стандартный способ настройки cron задач для Linux-серверов (Apache с cPanel). Преимущества данного метода:
- Полное управление запуском функции WP-Cron
- Обход зацикливания
- Снижение нагрузки на сервер (если на вашем сервере хостятся многочисленные вебсайты на базе WP)
Перед тем, как воспользоваться этим методом, убедитесь в том, что ваш веб-хост позволяет вам настраивать стандартные Linux cron задачи. Способ настройки может отличаться в зависимости от панели управления, которая предлагается вашим сервером; для данной статьи я воспользуюсь панелью cPanel, чтобы настроить задачи cron – данная панель очень популярна для серверов с системой Linux.
Шаги, которые нужно будет сделать:
- Отключить внутренний WP-Cron, запускаемый при загрузке страницы.
- Настроить cron функцию, которая будет совершать запрос к wp-cron.php файлу с определенным интервалом времени.
Да, это очень просто реализовать. Всего лишь два шага.
Примечание: перед тем, как делать это, учтите, что отключение внутреннего планировщика WP-Cron может привести к тому, что ваш веб-сайт или ваши плагины будут некорректно работать.
1. Отключение внутренней функции WP-Cron.
Открываем файл wp-config.php в любом текстовом редакторе и добавляем в него две следующих строки:
//Disable internal Wp-Cron function define('DISABLE_WP_CRON', true);
Это предотвратит выполнение внутренней функции WP-Cron. Файл wp-cron.php не будет вызываться.
2. Устанавливаем аутентичную cron функцию из вашей панели управления хостинга.
Если у вас есть возможность настройки cron задач, то тогда сделайте это следующим образом:
wget http://www.server.com/wp-cron.php > /dev/null 2>&1
Делаем все это из панели cPanel
1. Входим в свой аккаунт cPanel
Обычно ссылка имеет вид http://yourwebsite.com/cpanel или http://yourwebsite.com:2082. Как только вы введете id пользователя и пароль и войдете в панель управления, перейдите к секции Advanced.
2. Переходим к странице настроек Cron.
Щелкаем по иконке Cron Jobs в секции Advanced.
3. Настраиваем задачи Cron.
На новой странице вы найдете раздел Add New Cron Job. В списке Common Settings выбираем «Every 5 minutes…». Как только вы выберете этот пункт, все остальные поля будут автоматически заполнены необходимой информацией. На следующем шаге я объясню, почему я выбрал именно 5-минутный интервал запуска скрипта.
В поле command вводим следующую строку (не забудьте указать корректный адрес сайта):
wget http://www.yourwebsite.com/wp-cron.php > /dev/null 2>&1
Теперь щелкаем по кнопке Add New Cron Job.
Начиная с этого момента, сервер будет совершать запрос к файлу wp-cron.php каждые пять минут. Теперь о причине, по которой я задал именно 5 минут. Это сделано для того, чтобы можно было загрузить крупные файлы изображений, бэкап-процессы и т.д. Однако вы всегда можете изменить настройки и задать, скажем, запуск cron каждую минуту.
Примечание: Cron отлично работает для среднестатистических сайтов WordPress. Если вы используете сеть WP, то в таком случае вам понадобится совершать дополнительные действия, потому не выполняйте приведенные выше шаги, если вы работаете с мультисайтами.
Источник: wp.tutsplus.com
Так я так и не понял, надо этот крон делать, или это уже не актуально для последних версий WP?
В последних версиях, я так понял, уже доработали это, но проблемы все равно появляются у некоторых пользователей, потому для их решения подойдут методы, описанные в статье.
Cron лучше не деактивировать, а почистить задания, виной в основном становятся плагины
Если у сайта есть SSL, тогда нужно указывать https для задания?
Да.
Низкий поклон вам! У меня решилась проблема с нагрузкой. Они достигала 300%, а сейчас 1-2%. Большое спасибо!!!!!
Использую сеть WP. Как быть?
Нужна публикация запланированных новостей и пинг через обычный крон.
Попробуйте плагин https://wordpress.org/plugins/multisite-system-cron/