Команды управления агентами
Команды для работы с агентами Битрикс: просмотр списка и запуск агентов.
agent:list
Выводит список агентов с информацией о статусе и времени выполнения.
Синтаксис
php bitrix.php agent:list [опции]Опции
--limit=N- ограничить количество выводимых агентов (по умолчанию: все)--active- показать только активные агенты--inactive- показать только неактивные агенты--module=<module>- фильтр по модулю-v,-vv- подробный вывод
Примеры использования
# Список всех агентов
php bitrix.php agent:list
# Только первые 50 агентов
php bitrix.php agent:list --limit=50
# Только активные агенты
php bitrix.php agent:list --active
# Только неактивные агенты
php bitrix.php agent:list --inactive
# Агенты конкретного модуля
php bitrix.php agent:list --module=main
php bitrix.php agent:list --module=catalog
# Активные агенты каталога
php bitrix.php agent:list --active --module=catalog
# С подробной информацией
php bitrix.php agent:list -vВывод команды
Команда выводит таблицу со следующей информацией:
- ID - идентификатор агента
- Название - имя функции агента
- Модуль - модуль, которому принадлежит агент
- Активен - статус активности
- Следующий запуск - дата и время следующего выполнения
- Интервал - интервал выполнения в секундах
- Приоритет - приоритет выполнения (в подробном режиме)
- Последний запуск - дата последнего выполнения (в подробном режиме)
- Пользователь - ID пользователя, если агент пользовательский (в подробном режиме)
agent:run
Запускает все активные агенты, которые должны быть выполнены.
Синтаксис
php bitrix.php agent:run [опции]Опции
--module=<module>- запустить агенты только указанного модуля--force- принудительный запуск всех агентов (игнорировать время следующего запуска)-v,-vv- подробный вывод прогресса
Примеры использования
# Запуск всех агентов, которые должны быть выполнены
php bitrix.php agent:run
# Запуск агентов конкретного модуля
php bitrix.php agent:run --module=catalog
php bitrix.php agent:run --module=sale
# Принудительный запуск всех агентов
php bitrix.php agent:run --force
# С подробным выводом
php bitrix.php agent:run -v
# Запуск агентов модуля с подробным выводом
php bitrix.php agent:run --module=main -vvКак это работает
- Команда проверяет список активных агентов
- Определяет агенты, время выполнения которых наступило
- Запускает каждый агент последовательно
- Обновляет время следующего запуска
Что делают агенты
Агенты в Битрикс выполняют различные фоновые задачи:
Системные агенты:
- Очистка устаревших данных
- Отправка почты из очереди
- Обновление статистики
- Проверка лицензий
- Удаление временных файлов
Модуль каталога:
- Пересчет цен
- Обновление курсов валют
- Обновление скидок
- Управление остатками
Модуль продаж:
- Отмена неоплаченных заказов
- Отправка уведомлений
- Обработка повторяющихся заказов
- Обновление статусов доставки
Режимы запуска агентов
Через веб-запросы (хит)
По умолчанию агенты запускаются при обращении к сайту. Не рекомендуется для продакшена.
Через cron (рекомендуется)
# Запуск агентов каждые 5 минут
*/5 * * * * cd /var/www/bitrix && php bitrix.php agent:runЧерез systemd service
Создание постоянного процесса для обработки агентов.
Использование в автоматизации
Базовая настройка cron
# Добавить в crontab
# Запуск агентов каждые 5 минут
*/5 * * * * cd /var/www/bitrix && php bitrix.php agent:run >> /var/log/bitrix-agents.log 2>&1Раздельный запуск по модулям
#!/bin/bash
# Запуск агентов разных модулей с разной частотой
cd /var/www/bitrix
# Основные агенты - каждые 5 минут
if [ $(($(date +\%M) % 5)) -eq 0 ]; then
php bitrix.php agent:run --module=main
fi
# Агенты каталога - каждые 15 минут
if [ $(($(date +\%M) % 15)) -eq 0 ]; then
php bitrix.php agent:run --module=catalog
fi
# Агенты продаж - каждые 30 минут
if [ $(($(date +\%M) % 30)) -eq 0 ]; then
php bitrix.php agent:run --module=sale
fiМониторинг выполнения агентов
#!/bin/bash
# Проверка и запуск агентов с логированием
cd /var/www/bitrix
LOG_FILE="/var/log/bitrix-agents-$(date +%Y%m%d).log"
{
echo "=== Запуск агентов: $(date) ==="
# Показать агенты, готовые к выполнению
echo "Агенты к выполнению:"
php bitrix.php agent:list --active -v
# Запустить агенты
echo "Выполнение:"
php bitrix.php agent:run -v
echo "=== Завершено: $(date) ==="
echo ""
} >> "$LOG_FILE" 2>&1Запуск с контролем времени выполнения
#!/bin/bash
# Запуск агентов с ограничением времени выполнения
cd /var/www/bitrix
# Установить timeout 5 минут
timeout 300 php bitrix.php agent:run -v
if [ $? -eq 124 ]; then
echo "ВНИМАНИЕ: Превышено время выполнения агентов" | \
mail -s "Agents Timeout Alert" admin@example.com
fiПринудительный запуск всех агентов
#!/bin/bash
# Экстренный запуск всех агентов (например, после восстановления системы)
cd /var/www/bitrix
echo "ВНИМАНИЕ: Принудительный запуск всех агентов"
echo "Начало: $(date)"
php bitrix.php agent:run --force -vv
echo "Завершено: $(date)"Создание systemd service
# /etc/systemd/system/bitrix-agents.service
[Unit]
Description=Bitrix Agents Runner
After=network.target mysql.service
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/bitrix
ExecStart=/usr/bin/php bitrix.php agent:run
Restart=always
RestartSec=300
# Логирование
StandardOutput=append:/var/log/bitrix-agents.log
StandardError=append:/var/log/bitrix-agents-error.log
[Install]
WantedBy=multi-user.targetАктивация:
sudo systemctl enable bitrix-agents.service
sudo systemctl start bitrix-agents.service
sudo systemctl status bitrix-agents.serviceПродвинутые сценарии
Умный запуск с проверкой нагрузки
#!/bin/bash
# Запуск агентов только при низкой нагрузке системы
cd /var/www/bitrix
# Получить нагрузку системы
LOAD=$(uptime | awk -F'load average:' '{ print $2 }' | cut -d',' -f1 | xargs)
LOAD_INT=$(echo "$LOAD" | cut -d'.' -f1)
# Запустить только если нагрузка менее 3.0
if [ "$LOAD_INT" -lt 3 ]; then
php bitrix.php agent:run
else
echo "Высокая нагрузка ($LOAD), запуск агентов отложен"
fiПриоритетный запуск критичных агентов
#!/bin/bash
# Сначала запуск критичных агентов, затем остальных
cd /var/www/bitrix
# Критичные модули
CRITICAL_MODULES=("main" "sale")
# Обычные модули
NORMAL_MODULES=("catalog" "iblock")
# Запуск критичных агентов
for module in "${CRITICAL_MODULES[@]}"; do
echo "Запуск критичных агентов: $module"
php bitrix.php agent:run --module="$module"
done
# Пауза
sleep 10
# Запуск обычных агентов
for module in "${NORMAL_MODULES[@]}"; do
echo "Запуск обычных агентов: $module"
php bitrix.php agent:run --module="$module"
doneАудит агентов
#!/bin/bash
# Создание отчета по агентам
cd /var/www/bitrix
REPORT="/tmp/agents_report_$(date +%Y%m%d).txt"
{
echo "=== Отчет по агентам Битрикс ==="
echo "Дата: $(date)"
echo ""
echo "=== Все агенты ==="
php bitrix.php agent:list -v
echo ""
echo "=== Активные агенты ==="
php bitrix.php agent:list --active
echo ""
echo "=== Неактивные агенты ==="
php bitrix.php agent:list --inactive
echo ""
} > "$REPORT"
# Отправка отчета
mail -s "Bitrix Agents Report" admin@example.com < "$REPORT"Troubleshooting
Агенты не выполняются
Проблема: Агенты не запускаются автоматически
Решения:
- Проверьте настройку cron:
crontab -l - Убедитесь, что агенты активны:
php bitrix.php agent:list --active - Проверьте настройки в
.settings.php - Проверьте логи cron:
/var/log/cronили/var/log/syslog - Запустите агенты вручную для проверки:
php bitrix.php agent:run -v
Агенты выполняются слишком долго
Проблема: Выполнение агентов занимает много времени
Решения:
- Используйте опцию
-vдля определения медленных агентов - Разделите запуск агентов по модулям
- Увеличьте интервал запуска для некритичных агентов
- Оптимизируйте код медленных агентов
- Увеличьте
max_execution_timeв php.ini
Агент зависает
Проблема: Конкретный агент вызывает зависание
Решения:
- Определите проблемный агент:
php bitrix.php agent:list -v - Временно деактивируйте проблемный агент через БД
- Проверьте код агента на наличие бесконечных циклов
- Проверьте логи PHP на наличие ошибок
- Используйте timeout для защиты:
timeout 300 php bitrix.php agent:run
Дублирование выполнения
Проблема: Агенты выполняются несколько раз одновременно
Решения:
- Убедитесь, что cron настроен правильно (нет дублирующих записей)
- Используйте блокировки (flock) в скрипте запуска:bash
flock -n /tmp/agents.lock php bitrix.php agent:run - Проверьте, что нет параллельных процессов:
ps aux | grep agent
Полезные советы
💡 Используйте cron - не полагайтесь на автоматический запуск через хиты
💡 Мониторьте выполнение - логируйте запуск и результаты работы агентов
💡 Разделяйте по модулям - запускайте критичные агенты чаще, обычные - реже
💡 Контролируйте время - используйте timeout для защиты от зависаний
💡 Проверяйте регулярно - периодически проверяйте список и статус агентов
💡 Оптимизируйте код - следите за производительностью пользовательских агентов
Смотрите также
- Команды кеша - агенты часто работают с кешем
- Примеры cron - настройка автоматического запуска агентов
- Официальная документация Битрикс по агентам