Поддержка Проблемы и решения cron хостинга приводит к Просроченным публикациям

  • Доброго времени суток.

    Из-за возросшей нагрузки на сервер было принято решение заменить wp_cron на cron хостинга. Для этого по инструкции в wp-config.php была дописана строка:

    define(‘DISABLE_WP_CRON’, true);

    А в планировщике задач была выставлена новая задача с командой:

    wget -q -O — http://kmvexpress.ru/wp-cron.php?doing_wp_cron > /dev/null 2>&1

    Шаг был выставлен в 5 минут (пробовал с 1 минутой сейчас).

    В итоге все запланированные записи стали выдавать «Публикация просрочена». Техподдержка хостинга говорит, что: «Согласно логам cron, задание успешно выполняется каждые пять минут.».

    Скажите, почему может так происходить и как можно исправить ситуацию?

    Спасибо

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Для этого по инструкции в wp-config.php была дописана строка:

    define(‘DISABLE_WP_CRON’, true);

    Разбирайтесь с причинами «нагрузок».

    https://wordpress.tv/2015/08/20/konstantin-kovshenin-wordpress-performance-killers/ с 7:30

    Для решения же просроченных: https://wordpress.org/plugins/search/missed+schedule

    • Ответ изменён 6 лет, 2 месяца назад пользователем SeVlad.

    Спасибо. Видео должно быть полезным. При первой возможности гляну.

    На сейчас дыру залатал плагином WP Missed Schedule Posts. Он раз в 15 минут (по умолчанию) проверяет просроченные записи. Cron выставил на проверку каждые 10 минут.

    По итоге записи сдвигаются на 10 минут, но публикуются. Как я понимаю, снижение нагрузки, частично, = снижению частоты запросов. Так что от таких «запозданий» не уйти.

    Cron выставил на проверку каждые 10 минут.

    Не стоит так часто дёргать скрипты. Если же Вам реально нужна частая публикация чего-либо, то тут нужно применять др методы. Вскользь об этом Константин упомянул в докладе.

    Модератор Yui

    (@fierevere)

    永子

    cron достаточно низкую нагрузку создает сам по себе, так что если растет нагрузка на сервер, то навряд ли cron это то, чем нужно заниматься в первую очередь оптимизации

    Модератор Yuri

    (@yube)

    Из-за возросшей нагрузки на сервер было принято решение заменить wp_cron на cron хостинга.

    Не думаю, что wp-cron.php вызванный wget’ом, создает меньшую нагрузку, чем вызванный через wp_remote_post(). Разве что возможная «рассинхронизация» с заходами посетителей на сайт может быть плюсом в плане распределения нагрузки во времени. Но с тем же успехом системный хрон может дернуть wp-cron.php и в очень неудачный момент. С излишней нагрузкой надо бороться другими методами.

    Немного повторюсь. Была ситуация с нестандартно растущей нагрузкой. Например, при 900 пользователях с 1600 просмотрами (в день) нагрузка меньше, чем при 400 пользователях с 600+ просмотрами. Не совсем ясная ситуация.

    Был задан вопрос в техподдержку хостинга (с сайтом ничего не делали, кроме публикаций). В итоге, они ответили следующее:

    «В логах сервера зафиксировано огромное количество следующих записей: 31.31.196.168 — — [22/Feb/2018:01:09:54 +0300] kmvexpress.ru POST /wp-cron.php?doing_wp_cron….

    Судя по всему, нагрузка на CPU возросла в связи с длительным выполнением Cron заданий, которые настроены непосредственно в CMS вашего сайта.

    Также наблюдаем большое количество записей следующего вида: 31.180.237.114 — — [21/Feb/2018:18:57:41 +0300] kmvexpress.ru POST /wp-admin/admin-ajax.php HTTP/1.1 200 105…

    Скрипт admin-ajax.php выполняет продление пользовательской сессии WordPress. В данном случае рекомендуем отключить указанный скрипт.
    »

    По итогу сделал 2 глобальных действия:

    1. В header.php добавил следующий код:

    add_action( ‘init’, ‘my_deregister_heartbeat’, 1 );
    function my_deregister_heartbeat() {
    global $pagenow;

    if ( ‘post.php’ != $pagenow && ‘post-new.php’ != $pagenow )
    wp_deregister_script(‘heartbeat’);
    }

    2. Дописал в wp-config.php строку:

    define(‘DISABLE_WP_CRON’, true);

    параллельно в планировщике хостинга указал команду:

    wget -q -O — http://kmvexpress.ru/wp-cron.php?doing_wp_cron > /dev/null 2>&1

    с шагом в 10 минут. После этого все запланированные записи начали становиться Просроченными. Техподдержка хостинга посмотрела логи и открестилась, у них cron работает. Добавил плагин WP Missed Schedule Posts, который раз в 15 минут мониторит и публикует все со статусом «Просрочено». Костыль помог публиковать записи с небольшим опозданием.

    По поводу других шагов по оптимизации:

    1. В .htaccess заблокированы некоторые «спамовые» IP, которые создавали большое количество запросов. Перекрыт MegaIndex, который не вылазил с сайта и т.д.

    2. В robots.txt прописаны правила «можно/нельзя» для разных поисковиков. Там же указан Crawl-delay с параметром 40.

    3. Установлены плагины:

    — W3 Total Cache — для кэширования, минификации и т.д.
    — miniOrange Limit Login Attempts — для устранения проблемы с перебором паролей и постоянным «ломлением» в админку.
    — Wordfence Security — в качестве фаервола и защиты от возможных вирусов и т.д.

    Судя по всему, нагрузка на CPU возросла в связи с длительным выполнением Cron заданий, которые настроены непосредственно в CMS вашего сайта.

    Обратите внимание на слово «длительным». Не сам крон, а то что он запускает — есть причина. И пока «это» не отработает следующее задание крона не запустится, создавая очередь.

    Скрипт admin-ajax.php выполняет продление пользовательской сессии WordPress. В данном случае рекомендуем отключить указанный скрипт.

    А за такие «советы» надо хостеру бить морду.

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «cron хостинга приводит к Просроченным публикациям» закрыта для новых ответов.