Странное поведение cron-задач и как это решить?

Вопрос или проблема

Wordpress cron job

Здоровье моего сайта показало, что задания cron пропустили расписание, поэтому я установил плагин “Wp control”, чтобы проверить задания cron.

Обычно “следующий запуск” показывает будущее время, но в моем случае он показывает время в прошлом, например, 6 часов назад.

Я пытался отключить все плагины, переустановить WordPress, очистить базу данных, перезапустить сервер, но проблема все еще остается.

После перезапуска сервера я выяснил, что это произошло прямо после выполнения задания cron, так что каждое задание cron никогда не будет выполняться второй раз, потому что следующий запуск всегда будет в прошлом!

Странная вещь в том, что на том же сервере есть 4 других экземпляра WordPress, и все 5 сайтов используют тот же php7.4 и MySQL, но их задания cron работают нормально.

Я проверил настройки даты и времени, я также пытался увеличить количество php “max_children” и “start_servers”, потому что некоторые результаты Google говорили, что это может быть связано с проблемами памяти php, но все еще не могу решить эту проблему.

Пожалуйста, помогите мне, как отладить проблему с заданием cron подобного рода и как ее решить?

Спасибо за ваше внимание!

Задания cron в прошлом — это задания cron, которые еще не имели возможности выполниться.

Очень Небольшое Количество Посетителей

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

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

WP Cron Выключен

Возможно, WP_CRON установлено в false в wp-config.php? Это распространено на сайтах, которые вместо этого полагаются на ручной запуск cron через системный cron.

Либо повторно включите это, либо исправьте системный cron, который должен вручную запускать WP Cron.

Ошибки PHP

Возможно, следующее задание cron вызывает фатальную ошибку, что предотвращает его выполнение и задерживает очередь. Проверьте ваши журналы ошибок.

Очень Большой Резерв/Задания

Обычно WP Cron может работать только в течение короткого периода времени, прежде чем столкнется с тем же лимитом времени, который останавливает загрузку веб-страниц навсегда. Аналогично, у него будут такие же ограничения по памяти.

Поэтому, если на вашем сайте много заданий, он может не успевать обрабатывать все их вовремя. Также кастомное задание может занять слишком много времени и не иметь достаточно времени для завершения. Обычно это отобразится в журнале ошибок PHP как ошибки предела времени или памяти.

Ошибки Основного Сайта

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

Ответ или решение

Странное поведение cron-задач в WordPress: анализ и решение проблемы

Введение

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

Анализ проблемы

  1. Попробуем разобраться с данными ошибок:
    Вы устанавливаете плагин "WP Control", который показывает, что "следующий запуск" запланирован на время, которое уже прошло. Это указывает на то, что WP Cron не выполняет запланированные задачи должным образом.

  2. Проблемы с активностью посетителей:
    Ваша проблема может быть связана с тем, что на сайт приходит очень мало посетителей. WP Cron запускается не по расписанию, а только когда пользователь посещает сайт. Если посетителей нет, cron-задачи не могут быть инициированы. Настоятельно рекомендуется использовать системные cron-задачи (например, crontab), чтобы удостовериться, что cron-задачи запускаются даже при отсутствии активности на сайте.

  3. Проверка конфигурации:
    Параметр define('DISABLE_WP_CRON', true); в файле wp-config.php может блокировать автоматическое выполнение cron-задач. Убедитесь, что этот параметр не установлен в "true". Если он был установлен намеренно, необходимо настроить системный cron, который будет инициировать выполнение wp-cron.php через определенные интервалы.

  4. Ошибки в PHP:
    Фатальные ошибки в коде, связанном с выполняемыми cron-задачами, могут блокировать выполнение следующих задач. Проверьте файл логов ошибок PHP, чтобы исключить возможность fatal error.

  5. Большая очередь задач:
    Если очередь cron-задач слишком велика, это может привести к исчерпанию лимитов времени или памяти, которые установленны в PHP. Убедитесь, что выполнение задач не превышает эти лимиты. Если есть задачи, требующие значительных ресурсов, возможно, стоит рассмотреть возможность их оптимизации.

  6. Ошибки на главной странице:
    WP Cron инициализируется в конце загрузки страниц, и если происходит ошибка на странице, которая нарушает завершение загрузки, это может помешать запуску cron-задач. Используйте инструменты отладки, чтобы убедиться, что главная страница загружается корректно.

Рекомендации по решению проблемы

  1. Настройка системного cron:
    Создайте системное cron-задание, которое будет запускать wp-cron.php через регулярные промежутки времени, например, каждые 15 минут. Для этого откройте crontab с помощью команды crontab -e и добавьте следующую строку:

    */15 * * * * wget -q -O - http://ваш-сайт/wp-cron.php?doing_wp_cron > /dev/null 2>&1
  2. Проверка конфигурации WordPress:
    Убедитесь, что настройки сайта и сервера (время и дата; настройки PHP) правильно настроены. Также проверьте параметры max_children и start_servers, но более важным будет правильное использование системного cron.

  3. Мониторинг логов:
    Проверяйте логи ошибок вашего сервера (Apache, Nginx и т.д.) и PHP для выявления потенциальных проблем. Убедитесь, что все ошибки были исправлены.

  4. Оптимизация задач:
    Если в очереди много задач, рассмотрите возможность их оптимизации. Разделите массу задач на более мелкие и экономьте ресурсы.

  5. Тестирование и отладка:
    Используйте инструменты отладки в WordPress (например, плагин Debug Bar), чтобы проверить, какие именно задачи действительно вызывают проблему.

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...