Агенты не выполняются - разбор причин
Агенты числятся в списке, а фоновые задачи не выполняются. Разбираем причины в порядке убывания частоты.
С чего начать
Смотрим очередь агентов и время их запуска:
$res = CAgent::GetList(['NEXT_EXEC' => 'ASC'], ['ACTIVE' => 'Y']);while ($agent = $res->Fetch()) { printf("%-40s след=%s посл=%s\n", mb_substr($agent['NAME'], 0, 40), $agent['NEXT_EXEC'], $agent['LAST_EXEC'] ?: '(ни разу)');}// пустая дата последнего запуска означает, что очередь не разбиралась ни разуВремя следующего запуска в прошлом означает, что агенты стоят. Пустое время последнего выполнения означает, что агент не отрабатывал ни разу с момента создания.
Проверяем задание расписания и его окружение:
crontab -l -u bitrix # задания пользователя сайтаgrep -c cron_events /var/spool/cron/bitrix 2>/dev/null # заведён ли обработчик# путь к PHP и путь к скрипту - две самые частые ошибки в заданииwhich php && php -v | head -1tail -30 /home/bitrix/cron.log 2>/dev/nullЗадание запускается своим процессом PHP, и версия там может отличаться от той, что видит сайт. Файл журнала в конце команды - единственный способ увидеть, что именно происходит при запуске.
Запускаем обработчик агентов руками:
# так же, как это делает расписание: видно и ошибки, и отсутствие правsudo -u bitrix /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.phpecho "код возврата: $?"# ненулевой код и пустой вывод - разные симптомы: первый про ошибку, второй про праваРучной запуск от имени пользователя сайта отвечает сразу на два вопроса: доходит ли дело до кода платформы и не мешают ли права на файлы.
Причины
-
Агенты работают на хитах, а посетителей нет примерно 30% случаев
ПризнакНа тестовом сайте агенты стоят, на живом выполняются рывками и с задержкой.
ПроверкаСмотрим настройку запуска агентов в параметрах главного модуля.
Что делатьПереключаем агентов на запуск по расписанию и заводим задание с обработчиком агентов.
-
В задании неверный путь к PHP или к скрипту примерно 25% случаев
ПризнакЗадание в списке есть, журнал пуст, следов запуска нигде нет.
ПроверкаЗапускаем ту же команду руками от имени пользователя сайта и смотрим вывод.
Что делатьПрописываем полные пути к исполняемому файлу PHP и к обработчику агентов, вывод перенаправляем в файл.
-
Расписание запускает другую версию PHP примерно 20% случаев
ПризнакСайт работает, а запуск по расписанию падает на ошибке синтаксиса или отсутствующем расширении.
ПроверкаСверяем версию PHP в командной строке с версией, которую показывает сайт.
Что делатьУказываем в задании исполняемый файл нужной ветки PHP явно, а не короткое имя команды.
-
Упавший агент блокирует очередь примерно 15% случаев
ПризнакОдин агент отработал наполовину, остальные с этого момента стоят.
ПроверкаСмотрим время следующего запуска у всех агентов: у сбойного оно застряло в прошлом.
Что делатьОтключаем сбойный агент, разбираем его ошибку отдельно и возвращаем в очередь после исправления.
-
Нет прав на файлы или на запись в кэш примерно 10% случаев
ПризнакРучной запуск от рута работает, от пользователя сайта - нет.
ПроверкаЗапускаем обработчик от имени пользователя сайта и смотрим сообщения об отказе доступа.
Что делатьПриводим владельца файлов сайта к пользователю веб-сервера; задания расписания заводим от того же пользователя.
Частые вопросы
Как часто запускать обработчик агентов?
Раз в минуту - обычный вариант: агенты сами решают, кому пора выполняться. Чаще смысла нет, реже - задачи начинают опаздывать на интервал запуска.
Почему агент выполняется чаще, чем задано?
При периодическом режиме интервал отсчитывается от начала выполнения, а не от конца. Долгий агент при коротком интервале запускается повторно, не дождавшись предыдущего.
Куда смотреть, если агент выполняется, но ничего не делает?
В его собственный журнал: снаружи виден только факт запуска. Запись в файл в начале и в конце агента отвечает на этот вопрос за одну итерацию.
Нужно ли отключать агенты на хитах после перехода на расписание?
Да, иначе они продолжат выполняться и в запросах посетителей. Настройка задаётся в параметрах главного модуля, а не в задании расписания.
Смежное
- Агенты изнутри: расписание, хиты, cron, блокировка - как устроена очередь агентов
- Агенты и cron - оглавление подтемы
- Долгая операция шагами: порции, состояние, прогресс - пошаговый механизм поверх агентов
- Обновление окружения и смена версии PHP - откуда берётся чужая версия PHP
- Настройка отправки почты - очередь писем разбирает агент
- Карта сайта и robots.txt: генерация, расписание, мультисайт - пересборку карты выполняет агент
- Сервер и поиск - устройство сервера целиком
- Журнал событий: чтение, очистка, свои записи - куда агент пишет следы работы
- Подписка на поступление товара: уведомление о наличии - ещё одна рассылка на агентах
- Письма с сайта не доходят: разбор причин - очередь писем как частая жертва агентов
- Свой агент и задание по расписанию: создание, шаг, защита - как завести свою фоновую задачу
- Карта сайта неполная или не генерируется: разбор причин - если карту не пересобирает агент
- Платформа на обычном хостинге: настройка руками - расписание из панели хостинга