Очередь Action Scheduler в WooCommerce: как найти причину задержек

Редакция HOSTIO · Опубликовано 26.10.2026 · Обновлено 27.10.2026

Разработчик работает на ноутбуке рядом с мониторами

Фото: Christina Morillo / Pexels.

В материале

Как исследовать очередь Action Scheduler: найти повторяющийся сбой, отделить запуск от обработчика, проверить внешние эффекты и избежать дублей при повторном выполнении.

Определите, какое бизнес-действие задержалось

Action Scheduler — очередь фоновых действий, которую используют WooCommerce и другие расширения. В ней могут находиться уведомления, вебхуки, синхронизация и операции подписок. Задача со статусом pending не является сама по себе ошибкой: она может ожидать будущего срока. Начинайте с вопроса, какой результат должен был появиться и к какому времени, а не с попытки сделать список пустым.

Например, товар не обновился после импорта, тестовый вебхук не доставлен или письмо осталось без подтверждения. Это разные обработчики и внешние зависимости. Запишите идентификатор действия, hook, группу, запланированное время, статус и историю. Не публикуйте аргументы целиком: они могут содержать адреса, идентификаторы клиентов и секреты интеграции. В этом материале нет выполненных на чужих магазинах испытаний.

Найдите штатный экран и прочитайте историю

При установленном WooCommerce экран обычно доступен через «WooCommerce → Статус → Запланированные действия»; библиотека также предусматривает доступ через инструменты. Название пункта зависит от перевода и интеграции. Отфильтруйте нужную группу или hook, затем откройте журнал отдельной задачи. Сохраните точное сообщение и время, включая часовой пояс.

Состояние Возможное объяснение Следующий вопрос
Pending с будущим сроком Задача ещё не должна выполняться Правильно ли задано расписание?
Просроченная pending Запуск или пропускная способность требуют анализа Работает ли runner и меняется ли очередь?
In-progress Задача выполняется или выполнение прервалось Есть ли живой процесс и свежие записи?
Failed Обработчик завершился ошибкой или истёк контрольный срок Какой первый значимый сбой указан в журнале?
Complete Обработчик отмечен завершённым Подтверждён ли ожидаемый внешний результат?

Не меняйте статус напрямую в SQL. Статус, журнал, claims и собственное состояние расширения связаны логикой библиотеки. Ручная правка может скрыть исходную ошибку и нарушить повтор. Данные очереди сначала читают штатными средствами и передают владельцу обработчика.

Снимите динамику, а не только общее число

Одно число задач не показывает, растёт ли отставание. Сравните два наблюдения в согласованном интервале: сколько появилось, сколько завершилось, какая самая старая просроченная задача и какие группы преобладают. Будущие периодические действия отделяйте от уже просроченных. Крупный импорт может законно поставить много задач, а одна зависшая платёжная операция может быть важнее всей остальной очереди.

Наблюдение: дата / время / часовой пояс
Группа или hook: точное имя
Ожидаемый результат: тестовый импорт завершён
Самая старая просроченная задача: ID и срок
Изменение между наблюдениями: новые / complete / failed
Последнее сообщение ошибки: без секретов
Внешний результат: подтверждён / не подтверждён
Шаблон диагностики. Значения заполняются по своему магазину; это не измерения HOSTIO.

Сопоставьте динамику с импортом, резервным копированием, обновлением и отказом внешнего сервиса. Временное совпадение помогает сформировать гипотезу, но ещё не доказывает причину. Сохраните версии WooCommerce, Action Scheduler и расширения, которому принадлежит hook: библиотека может поставляться в составе нескольких компонентов.

Разделите запуск очереди и работу обработчика

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

Не отключайте защиту сайта целиком ради loopback. Передайте администратору точный отказ, адрес назначения, код ответа и время без токенов. Он должен выяснить, мешает ли конкретное правило WAF, авторизация стенда, DNS или конфигурация запуска. Проверка внешней главной страницы не подтверждает, что сервер способен выполнить нужный внутренний запрос.

WP-Cron и системное расписание

Запуск WP-Cron через системный планировщик может сделать расписание независимее от посещений, но требует корректного каталога, пользователя, PHP и защиты от наложения. Не добавляйте второй запуск вслепую рядом с существующим. Сначала выясните действующую схему; изменение серверного расписания выполняет ответственный специалист отдельной проверяемой операцией.

Установите причину конкретной ошибки

Признак в журнале Гипотеза Что проверить
Fatal error с компонентом Несовместимость или ошибка кода Версии, стек, воспроизводимость на стенде
Отказ внешнего API Авторизация, лимит или недоступность получателя Документированный ответ без секретного тела
Недостаточно памяти Размер партии или поведение обработчика Профиль и границы задачи до повышения лимита
Длительное выполнение Большая партия, сеть или блокировка Где расходуется время и есть ли прогресс
Повторяемое создание одних задач Ошибка постановки или повторов Владельца hook и правило уникальности

Запись об истечении времени не всегда означает, что внешний эффект не произошёл. Получатель мог принять запрос, а подтверждение не дошло обратно. Поэтому перед повтором операции проверьте внешний журнал и идентификатор события. Для оплаты, писем и импорта это принципиально: повторный запуск способен создать повторный результат даже после локального failed.

Подготовьте безопасный повтор одной задачи

До запуска выясните у разработчика, поддерживает ли обработчик идемпотентность: повтор с тем же идентификатором не должен создавать второй заказ, списание или письмо. Не выводите это свойство из самого наличия Action Scheduler. Библиотека управляет очередью, а семантика бизнес-операции находится в коде расширения и внешней системы.

  1. Сохраните ID, аргументы в закрытом виде и историю проблемной задачи.
  2. Проверьте, не выполнена ли операция на стороне получателя.
  3. Устраните подтверждённую причину сбоя.
  4. На изолированном стенде повторите один обезличенный пример.
  5. Сверьте локальный статус и внешний результат, включая отсутствие дубля.
  6. Только затем согласуйте ограниченную обработку рабочих задач.

Не нажимайте «Выполнить» для всей просроченной очереди без разбора. Она может содержать разные расширения и опасные внешние действия. Для теста используйте песочницу платёжного провайдера, тестовые адреса и отключённые рабочие интеграции. Если невозможно подтвердить последствия повтора, передайте конкретную задачу владельцу обработчика.

Как относиться к WP-CLI и увеличению пропускной способности

Action Scheduler предоставляет команды WP-CLI, но их доступность и параметры зависят от установленной версии. Начните со справки в разрешённом окружении, а не с копирования команды массового выполнения из статьи. Запуск через CLI способен реально выполнить бизнес-операции. Это не безвредный просмотр только потому, что команда введена в терминале.

wp help action-scheduler
Начальный просмотр доступных команд, если соответствующая интеграция установлена. Команды run и изменения очереди здесь намеренно не даны как универсальная инструкция.

Увеличение числа одновременных обработчиков может сильнее нагрузить базу и внешние API, а также увеличить конкуренцию за одни данные. Сначала оцените скорость завершения и ограничения получателя. Для независимых групп может требоваться отдельный план, а для операций, зависящих от порядка, параллельное выполнение особенно чувствительно. Настройку проверяют на репрезентативном стенде и возвращают при регрессии.

Очистка истории и борьба с причиной роста

Завершённые действия и журналы нужны для наблюдения и разбирательства. Их срок хранения определяется библиотекой, расширениями и правилами проекта. Failed не равно «можно удалить»: такая запись может быть единственным свидетельством недоставленного события. До очистки сохраните необходимый протокол и согласуйте, какие задачи уже разрешены, отменены или требуют повторной обработки.

Если очередь растёт из-за постоянного создания новых ошибок, удаление истории не исправит обработчик. Разберите правило постановки, условия повтора и внешнюю зависимость. Отдельно контролируйте свободное место и рост таблиц, но не удаляйте строки из нескольких таблиц по одному совпавшему слову. Штатные инструменты учитывают связи, которые ручная выборка может пропустить.

Проверьте завершение инцидента и возврат настроек

После исправления наблюдайте несколько последовательных запусков и сравните возраст просроченных задач, число новых failed и подтверждение результатов. Не требуйте нулевого pending: будущие задания остаются ожидающими. Зафиксируйте, что очередь обрабатывает новые события, а старые проблемные задачи получили отдельное решение. Один успешный повтор не доказывает исправление всех групп.

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

FAQ и рабочий результат

Все pending означают поломку?

Нет. Сначала сравните срок с текущим временем и отделите будущие задачи от просроченных. Затем изучите динамику и конкретный hook.

Failed гарантирует, что операция не произошла?

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

Можно ли очистить очередь, чтобы сайт ускорился?

Массовое удаление может потерять незавершённые операции. Сначала установите назначение задач и причину отставания, затем используйте согласованный штатный порядок.

Покупка более мощного VPS решит проблему?

Только если подтверждено ограничение ресурсов и обработчик корректен. Ошибка авторизации API, несовместимый код или создание дублей от мощности не исчезают.

Итог диагностики — не пустой список, а восстановленный поток задач: известны владельцы, запуск, причины отказов, правила безопасного повтора и результаты важных операций. Сохраните протокол без секретов и перечень задач, которые ещё требуют решения.

Источники и дата

Редакционная переработка: 26.10.2026. Источники относятся к своим версиям продуктов; параметры конкретного проекта необходимо подтвердить отдельно.

↑