Некоторое время назад мы начали наблюдать за проблемами производительности на сайте нашей компании, построенной с WordPress. Одной из вопросов, которые мы заметили, было вызов Crons в случайных запросах пользователей. Это реализовано, вызывая URL https://yourdomain.com/wp-cron.php
Анкет Хотя в этом файле WordPress вызывает метод PHP FASTCGI_FINISH_REQUEST
, который посылает ответ на пользователя как можно скорее, стоимость вызова подректов во время основного запроса стоит признать и улучшать. Есть и другие недостатки этого:
- Вызов Crons в контексте запроса означает, что он ограничен, например, По настройке PHP-FPM. У нас часто есть ограниченные ресурсы (такие как память или ограничение по времени) для HTTP -запросов.
- Что еще хуже, называя Cron как HTTP-запрос использует ресурс (например, пулы PHP-FPM, которые могут быть необходимы для обработки нашего трафика).
В Интернете есть много советов о том, как отключить изготовление подкоров, чтобы вызвать Crons и переместить их в CLI. Но есть одна проблема. Многие из этих советов предполагают, что эти запланированные задачи с использованием Crontab
Вызовите Curl (или другие призывы HTTP). Это решало первую проблему и делает запрос пользователя свободными от подректов, но не решает две вышеупомянутые проблемы. Это удивительно, потому что WordPress приходит с WP Cron
Команда, которая поддерживает выполнение запланированных задач в CLI, не выполняя HTTP -вызовы.
Чтобы сделать это, вы должны добавить одну линию в свой Crontab:
*/5 * * * * wp cron event run --due-now --path=path_to_your_wp
В этом случае мы называем запланированную задачу каждые 5 минут. WordPress отвечает за выбор конкретной задачи для запуска и запуска ее.
Конечно, вы также должны отключить призыв подреквянку к /wp-cron.php
файл. Для этого добавьте следующее в свой файл wp-config.php:
define('DISABLE_WP_CRON', true);
На мой взгляд, вы также должны отрицать доступ к wp-cron.php
Файл (потому что некоторые боты могут DDOS наш сайт, запрашивающий эту конечную точку). Я предлагаю сделать это на уровне сервера приложений. Например, если вы используете Nginx, добавьте следующее в конфигурацию вашего хоста:
location = /wp/wp-cron.php { deny all; }
Оригинал: «https://dev.to/plotek/wordpress-move-cron-jobs-to-cli-kgg»