Как избежать таймаута при ожидании вывода CGI-скрипта?
WordPress использует файл wp-cron.php в качестве виртуального cron-задания или запланированной задачи для автоматизации таких процессов, как публикация отложенных записей, проверка обновлений плагинов или тем, отправка уведомлений по электронной почте и многого другого.
По умолчанию WordPress настроен так, что вызывает wp-cron.php каждый раз, когда кто-то посещает ваш сайт на WordPress и присутствует запланированная задача, чтобы проверить: "не пора ли что-то сделать?".
Для сайтов с низкой посещаемостью это вполне нормально, но при увеличении трафика многократные проверки запланированных задач могут быть неэффективными и приводить к проблемам с использованием ресурсов сервера, а также замедлять загрузку вашего сайта.
Отключение стандартного поведения wp-cron.php
Мы можем легко указать WordPress, чтобы он позволил нам управлять выполнением wp-cron.php через файл wp-config.php.
Откройте ваш файл wp-config.php с помощью редактора кода в cPanel File Manager. Перейдите к нижней части настроек базы данных в wp-config.php, обычно около строки 37.
Добавьте следующий код:
define('DISABLE_WP_CRON', 'true');
Настройка ручного cron-задания для wp-cron.php
Мы не хотим оставлять WordPress без возможности автоматизации задач, которые ему могут понадобиться. Но теперь, когда он не запускается для каждого посетителя, у нас гораздо больше контроля над тем, когда эти задачи выполняются.
Для большинства пользователей WordPress запуск скрипта wp-cron.php каждые 6 часов вполне достаточен. Это всего 4 выполнения в день по сравнению с возможными сотнями или даже тысячами, если у вас большой трафик на сайте.
- Войдите в cPanel.
- В разделе "Advanced" нажмите на "Cron Jobs".
- Выберите "Once an hour" из выпадающего списка "Common Settings".
- Теперь выберите "Every 6 hours" из выпадающего списка "Hour".
Заполните команду для выполнения нашего cron-задания и нажмите "Add New Cron Job".
- cd /home/userna5/public_html; php -q wp-cron.php
Где userna5 — это имя вашего пользователя в cPanel.
Учтите, что путь /home/userna5/public_html предназначен для основного домена. Если вы используете дополнительный домен или WordPress установлен в поддиректории, обязательно обновите путь.
Вы должны увидеть сообщение об успешном добавлении нового cron-задания.
http://www.inmotionhosting.com/support/website/wordpress/disabling-the-wp-cronphp-in-wordpress

6 часов — это очень большой интервал, подходящий только для очень малоподвижных сайтов; это не может быть общей рекомендацией. Кроме того, wp-cron.php — это PHP-скрипт, который не предназначен для выполнения через php-cli. Вы должны запускать его с помощью команды wget; в противном случае могут возникнуть проблемы. Например, выполнение через php-cli устанавливает максимальное время выполнения в бесконечность, что оставляет дверь открытой для cron-заданий с ошибками или плохо написанным кодом, как у вас, которые могут выполняться вечно, пока ваш сервер не рухнет.

@cybmeta Я не понимаю. Что мне делать, если вы говорите, что это не рекомендуется.

6 часов могут быть хорошим вариантом для вас, я просто сказал, что это не может быть общей рекомендацией. У меня стоит 5 минут. Если 6 часов подходят вам — используйте их. Но я настоятельно рекомендую выполнять wp-cron.php через wget, а не через команду php-cli.

Если проблема в записях задач в wp-cron (из-за таймаутов), простое добавление их в другом месте может не помочь. Нам нужно знать, что именно вызывает таймаут, чтобы надежно устранить проблему.

этот ответ совершенно неверен. wordpress cron действительно проблематичен на сайтах с низким трафиком, но на высоконагруженных сайтах он должен работать хорошо. Скорее всего, причина ошибок - плохой код в ваших плагинах или теме. Если у вас есть процесс, которому требуется больше времени для выполнения, гораздо лучше просто изменить его таймаут PHP в коде. Крон, запускаемый каждые 6 часов - это совершенно неразумно и рано или поздно что-то сломает.
