Агенты не выполняются: письма не уходят, обмены не запускаются
Агенты — фоновые задачи продукта: отправка почты из очереди, обмен с 1С, пересчёты, очистка. Когда они встают, сайт продолжает работать, и проблему замечают не сразу — обычно по неотправленным письмам.
Сначала определите режим
Агенты запускаются либо на хите — при заходах посетителей, либо по расписанию через cron. От этого зависит, что проверять, а заодно и половина типовых поломок.
Режим задаётся настройкой главного модуля agents_use_crontab и константами в bitrix/php_interface/dbconn.php. Частая причина «агенты не работают» — переключение сделано наполовину: запуск на хите отключили, cron не настроили.
Если агенты на хите
- Откройте список агентов в административной части: у каждого видно время следующего запуска. Даты в прошлом, которые не двигаются, — агенты встали.
- Проверьте, активен ли сам агент: упавший с ошибкой снимается с выполнения.
- Посмотрите журнал ошибок — упавший агент оставляет там след.
- Оцените посещаемость: на сайте без трафика агенты на хите просто не запускаются, и ночные задачи не выполняются никогда.
Если агенты на cron
- Есть ли задание. Проверьте расписание того пользователя, под которым работает сайт, а не только root.
- Тот ли пользователь. Это главная ловушка — о ней ниже.
- Правильный ли интерпретатор. На сервере несколько версий PHP; в задании версию указывают явно, иначе после смены версии задание тихо падает.
- Права на файл обработчика в
bitrix/php_interface/. - Настройки консольного PHP. У него свой файл настроек, и требования к нему те же, что к веб-версии.
Главная ловушка: cron под root
Задание ставят в расписание root — так проще, прав хватает всегда. А дальше происходит вот что: агенты, запущенные от root, создают файлы кеша, и владельцем становится root. Веб-сервер работает от другого пользователя и перезаписать эти файлы уже не может.
Симптомы выглядят не связанными с cron: кеш не обновляется, на части страниц старые данные, в журнале ошибки записи, в каталоге управляемого кеша часть файлов принадлежит root. Проверяется просмотром владельцев файлов в каталогах кеша.
Правильно — ставить задание в расписание пользователя сайта. Если уже наступили, после смены пользователя нужно привести владельцев файлов кеша в порядок, иначе симптомы останутся.
Что ломается после перевода на cron
Перевод агентов на расписание — полезная операция, но у неё есть побочные эффекты, о которых узнают постфактум:
- Рассылки зависают. Письма остаются в статусе «отправляется» и не уходят даже при одном получателе: за отправку отвечает агент, которого теперь запускает cron, и если задание не работает, очередь стоит.
- Появляется сообщение о неотправленных письмах. Система честно пишет, что есть ошибки при отправке и сколько сообщений не ушло, — это индикатор, а не сама поломка.
- Скрипт запуска закрыт правами доступа. Если в конфигурации веб-сервера путь к обработчику закрыт от внешнего доступа, вызов через HTTP не сработает — нужен запуск через консольный PHP.
Как проверить, что всё работает
- В списке агентов время следующего запуска должно двигаться.
- Проверка системы в административной части не показывает предупреждений про агенты.
- Очередь почтовых событий разбирается: письма не копятся с пустым временем отправки.
- Владельцы файлов в каталогах кеша — пользователь сайта, а не root.
Проверяйте через сутки: часть агентов запускается редко, и «сразу после правки ничего не изменилось» — нормальная картина.
Частые ловушки
- Перенос сайта. Файлы и база переехали, задания расписания остались на старом сервере.
- Смена версии PHP. В задании указан интерпретатор, которого больше нет.
- Переключение режима наполовину — самый частый случай.
- Тяжёлый агент блокирует остальные. Импорт каталога, запущенный агентом, занимает очередь надолго; такие задачи выносят в отдельное задание расписания.
Частые вопросы
Как понять, работают агенты или нет?
В списке агентов в административной части у каждого видно время следующего запуска. Если даты в прошлом и не двигаются — агенты встали. Проверка системы тоже показывает предупреждение.
Перевели агенты на cron — перестали уходить рассылки.
За отправку отвечает агент, которого теперь запускает расписание. Если задание не работает или стоит у другого пользователя, очередь останавливается: письма висят в статусе «отправляется» даже при одном получателе.
Кеш перестал обновляться, в журнале ошибки записи.
Похоже, что cron запускается под root: файлы кеша создаются от его имени, и веб-сервер не может их перезаписать. Проверьте владельцев файлов в каталогах кеша, перенесите задание в расписание пользователя сайта и приведите владельцев в порядок.
Агенты на хите — это плохо?
Для небольшого сайта нормально: задачи выполняются при заходах посетителей. Минусы — на сайте без трафика ночью ничего не происходит, а кому-то из посетителей достаётся замедленная страница. На нагруженных сайтах агенты переводят на расписание.
После переноса сайта письма перестали уходить.
Проверьте задания расписания: при переносе они обычно не переезжают. Отправка почты часто привязана именно к ним, и сайт выглядит рабочим, пока кто-нибудь не спросит, где письма.
Переключил режим, агенты не запускаются вообще.
Классика: запуск на хите отключили, а задание в расписании не настроили или оно не работает. Проверьте настройку agents_use_crontab, константы в dbconn.php и наличие рабочего задания.