Skip to content

Команды управления агентами

Команды для работы с агентами Битрикс: просмотр списка и запуск агентов.

agent:list

Выводит список агентов с информацией о статусе и времени выполнения.

Синтаксис

bash
php bitrix.php agent:list [опции]

Опции

  • --limit=N - ограничить количество выводимых агентов (по умолчанию: все)
  • --active - показать только активные агенты
  • --inactive - показать только неактивные агенты
  • --module=<module> - фильтр по модулю
  • -v, -vv - подробный вывод

Примеры использования

bash
# Список всех агентов
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

Запускает все активные агенты, которые должны быть выполнены.

Синтаксис

bash
php bitrix.php agent:run [опции]

Опции

  • --module=<module> - запустить агенты только указанного модуля
  • --force - принудительный запуск всех агентов (игнорировать время следующего запуска)
  • -v, -vv - подробный вывод прогресса

Примеры использования

bash
# Запуск всех агентов, которые должны быть выполнены
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

Как это работает

  1. Команда проверяет список активных агентов
  2. Определяет агенты, время выполнения которых наступило
  3. Запускает каждый агент последовательно
  4. Обновляет время следующего запуска

Что делают агенты

Агенты в Битрикс выполняют различные фоновые задачи:

Системные агенты:

  • Очистка устаревших данных
  • Отправка почты из очереди
  • Обновление статистики
  • Проверка лицензий
  • Удаление временных файлов

Модуль каталога:

  • Пересчет цен
  • Обновление курсов валют
  • Обновление скидок
  • Управление остатками

Модуль продаж:

  • Отмена неоплаченных заказов
  • Отправка уведомлений
  • Обработка повторяющихся заказов
  • Обновление статусов доставки

Режимы запуска агентов

Через веб-запросы (хит)

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

Через cron (рекомендуется)

bash
# Запуск агентов каждые 5 минут
*/5 * * * * cd /var/www/bitrix && php bitrix.php agent:run

Через systemd service

Создание постоянного процесса для обработки агентов.


Использование в автоматизации

Базовая настройка cron

bash
# Добавить в crontab
# Запуск агентов каждые 5 минут
*/5 * * * * cd /var/www/bitrix && php bitrix.php agent:run >> /var/log/bitrix-agents.log 2>&1

Раздельный запуск по модулям

bash
#!/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

Мониторинг выполнения агентов

bash
#!/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

Запуск с контролем времени выполнения

bash
#!/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

Принудительный запуск всех агентов

bash
#!/bin/bash
# Экстренный запуск всех агентов (например, после восстановления системы)

cd /var/www/bitrix

echo "ВНИМАНИЕ: Принудительный запуск всех агентов"
echo "Начало: $(date)"

php bitrix.php agent:run --force -vv

echo "Завершено: $(date)"

Создание systemd service

ini
# /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

Активация:

bash
sudo systemctl enable bitrix-agents.service
sudo systemctl start bitrix-agents.service
sudo systemctl status bitrix-agents.service

Продвинутые сценарии

Умный запуск с проверкой нагрузки

bash
#!/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

Приоритетный запуск критичных агентов

bash
#!/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

Аудит агентов

bash
#!/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

Агенты не выполняются

Проблема: Агенты не запускаются автоматически

Решения:

  1. Проверьте настройку cron: crontab -l
  2. Убедитесь, что агенты активны: php bitrix.php agent:list --active
  3. Проверьте настройки в .settings.php
  4. Проверьте логи cron: /var/log/cron или /var/log/syslog
  5. Запустите агенты вручную для проверки: php bitrix.php agent:run -v

Агенты выполняются слишком долго

Проблема: Выполнение агентов занимает много времени

Решения:

  1. Используйте опцию -v для определения медленных агентов
  2. Разделите запуск агентов по модулям
  3. Увеличьте интервал запуска для некритичных агентов
  4. Оптимизируйте код медленных агентов
  5. Увеличьте max_execution_time в php.ini

Агент зависает

Проблема: Конкретный агент вызывает зависание

Решения:

  1. Определите проблемный агент: php bitrix.php agent:list -v
  2. Временно деактивируйте проблемный агент через БД
  3. Проверьте код агента на наличие бесконечных циклов
  4. Проверьте логи PHP на наличие ошибок
  5. Используйте timeout для защиты: timeout 300 php bitrix.php agent:run

Дублирование выполнения

Проблема: Агенты выполняются несколько раз одновременно

Решения:

  1. Убедитесь, что cron настроен правильно (нет дублирующих записей)
  2. Используйте блокировки (flock) в скрипте запуска:
    bash
    flock -n /tmp/agents.lock php bitrix.php agent:run
  3. Проверьте, что нет параллельных процессов: ps aux | grep agent

Полезные советы

💡 Используйте cron - не полагайтесь на автоматический запуск через хиты

💡 Мониторьте выполнение - логируйте запуск и результаты работы агентов

💡 Разделяйте по модулям - запускайте критичные агенты чаще, обычные - реже

💡 Контролируйте время - используйте timeout для защиты от зависаний

💡 Проверяйте регулярно - периодически проверяйте список и статус агентов

💡 Оптимизируйте код - следите за производительностью пользовательских агентов


Смотрите также

Документация BXMax CLI