Команды Messenger 
Стандартная команда Битрикс для работы с очередью Messenger: запуск worker для обработки асинхронных задач.
messenger:consume 
Запускает worker для обработки сообщений из очереди Битрикс Messenger в фоновом режиме.
Синтаксис 
php bitrix.php messenger:consume [queues] [опции]Аргументы 
queues- названия очередей для обработки (необязательный, можно указать несколько через пробел)
Опции 
--time-limit=<секунды>или-t- ограничение времени работы worker'а--sleep=<секунды>- время ожидания перед запросом новых сообщений после итерации (по умолчанию: 1)
Примеры использования 
# Запуск worker для всех очередей
php bitrix.php messenger:consume
# Для конкретных очередей
php bitrix.php messenger:consume queue1 queue2
# С ограничением времени работы (1 час)
php bitrix.php messenger:consume --time-limit=3600
# С настройкой задержки между итерациями (5 секунд)
php bitrix.php messenger:consume --sleep=5
# Комбинированный пример
php bitrix.php messenger:consume notifications messages \
  --time-limit=7200 \
  --sleep=3Настройка 
Конфигурация в .settings.php 
Для работы команды необходимо настроить режим работы Messenger в .settings.php:
<?php
return [
    'messenger' => [
        'value' => [
            'run_mode' => 'cli',  // Использовать CLI режим
        ],
        'readonly' => false,
    ],
];Создание systemd service 
# /etc/systemd/system/bitrix-messenger.service
[Unit]
Description=Bitrix Messenger Worker
After=network.target mysql.service redis.service
Requires=mysql.service
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/bitrix
ExecStart=/usr/bin/php bitrix.php messenger:consume --time-limit=3600
Restart=always
RestartSec=10
# Логирование
StandardOutput=append:/var/log/bitrix-messenger.log
StandardError=append:/var/log/bitrix-messenger-error.log
# Ресурсы
LimitNOFILE=65535
Nice=10
[Install]
WantedBy=multi-user.targetАктивация service:
sudo systemctl enable bitrix-messenger.service
sudo systemctl start bitrix-messenger.service
sudo systemctl status bitrix-messenger.serviceИспользование 
Запуск в фоновом режиме 
#!/bin/bash
# Запуск worker в фоновом режиме с логированием
cd /var/www/bitrix
nohup php bitrix.php messenger:consume \
  --time-limit=3600 \
  --sleep=2 \
  >> /var/log/bitrix-messenger.log 2>&1 &
echo "Messenger worker запущен в фоне"Запуск с автоперезапуском 
#!/bin/bash
# Скрипт с автоматическим перезапуском при падении
cd /var/www/bitrix
while true; do
    echo "Запуск messenger worker: $(date)"
    
    php bitrix.php messenger:consume \
        --time-limit=3600 \
        --sleep=2
    
    EXIT_CODE=$?
    echo "Worker завершился с кодом: $EXIT_CODE"
    
    # Если worker был остановлен намеренно (SIGTERM), не перезапускать
    if [ $EXIT_CODE -eq 143 ]; then
        echo "Worker остановлен, выход"
        break
    fi
    
    # Пауза перед перезапуском
    echo "Перезапуск через 10 секунд..."
    sleep 10
doneМониторинг worker'а 
#!/bin/bash
# Проверка работы messenger worker
PROCESS_COUNT=$(ps aux | grep "[m]essenger:consume" | wc -l)
if [ $PROCESS_COUNT -eq 0 ]; then
    echo "⚠ Messenger worker не запущен!"
    
    # Отправить уведомление
    echo "ВНИМАНИЕ: Messenger worker не работает" | \
        mail -s "Messenger Worker Down" admin@example.com
    
    # Перезапустить (если используется systemd)
    sudo systemctl start bitrix-messenger.service
elif [ $PROCESS_COUNT -gt 3 ]; then
    echo "⚠ Слишком много worker процессов: $PROCESS_COUNT"
else
    echo "✓ Messenger worker работает ($PROCESS_COUNT процессов)"
fiПродвинутые сценарии 
Множественные worker'ы для разных очередей 
#!/bin/bash
# Запуск разных worker'ов для разных типов очередей
cd /var/www/bitrix
# Worker для высокоприоритетных сообщений
nohup php bitrix.php messenger:consume high-priority \
  --time-limit=3600 \
  --sleep=1 \
  >> /var/log/messenger-high.log 2>&1 &
# Worker для обычных сообщений
nohup php bitrix.php messenger:consume normal \
  --time-limit=3600 \
  --sleep=2 \
  >> /var/log/messenger-normal.log 2>&1 &
# Worker для фоновых задач
nohup php bitrix.php messenger:consume background \
  --time-limit=3600 \
  --sleep=5 \
  >> /var/log/messenger-background.log 2>&1 &
echo "Множественные worker'ы запущены"Динамическое масштабирование 
#!/bin/bash
# Запуск дополнительных worker'ов при высокой нагрузке
cd /var/www/bitrix
# Получить количество сообщений в очереди (требуется Redis)
QUEUE_SIZE=$(redis-cli LLEN bitrix:messenger:queue)
WORKERS_COUNT=$(ps aux | grep "[m]essenger:consume" | wc -l)
# Минимум и максимум worker'ов
MIN_WORKERS=2
MAX_WORKERS=10
if [ "$QUEUE_SIZE" -gt 1000 ] && [ "$WORKERS_COUNT" -lt "$MAX_WORKERS" ]; then
    echo "Высокая нагрузка, запуск дополнительного worker'а"
    nohup php bitrix.php messenger:consume \
        --time-limit=1800 \
        --sleep=1 \
        >> /var/log/messenger-extra.log 2>&1 &
elif [ "$QUEUE_SIZE" -lt 100 ] && [ "$WORKERS_COUNT" -gt "$MIN_WORKERS" ]; then
    echo "Низкая нагрузка, лишние worker'ы завершатся автоматически"
fiЛогирование и статистика 
#!/bin/bash
# Worker с детальным логированием и статистикой
cd /var/www/bitrix
LOG_FILE="/var/log/bitrix-messenger-$(date +%Y%m%d).log"
STATS_FILE="/var/log/bitrix-messenger-stats.log"
{
    echo "=== Messenger Worker Start: $(date) ==="
    
    START_TIME=$(date +%s)
    
    php bitrix.php messenger:consume \
        --time-limit=3600 \
        --sleep=2 \
        -vv
    
    END_TIME=$(date +%s)
    DURATION=$((END_TIME - START_TIME))
    
    echo "=== Messenger Worker Stop: $(date) ==="
    echo "Duration: $DURATION seconds"
    echo ""
    
    # Записать статистику
    echo "$(date +%Y-%m-%d\ %H:%M:%S),$DURATION" >> "$STATS_FILE"
    
} >> "$LOG_FILE" 2>&1Интеграция с Supervisor 
# /etc/supervisor/conf.d/bitrix-messenger.conf
[program:bitrix-messenger]
command=/usr/bin/php /var/www/bitrix/bitrix.php messenger:consume --time-limit=3600 --sleep=2
directory=/var/www/bitrix
user=www-data
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/bitrix-messenger.log
stderr_logfile=/var/log/bitrix-messenger-error.log
stopwaitsecs=60
# Количество процессов
numprocs=2
process_name=%(program_name)s_%(process_num)02dАктивация:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start bitrix-messenger:*
sudo supervisorctl statusМониторинг и отладка 
Проверка логов 
#!/bin/bash
# Анализ логов messenger worker'а
LOG_FILE="/var/log/bitrix-messenger.log"
echo "=== Последние 50 строк лога ==="
tail -n 50 "$LOG_FILE"
echo ""
echo "=== Ошибки за последние 24 часа ==="
grep -i "error\|exception\|fatal" "$LOG_FILE" | tail -n 20
echo ""
echo "=== Статистика обработки ==="
grep "Processed" "$LOG_FILE" | tail -n 10Dashboard статистики 
#!/bin/bash
# Создание дашборда статистики
echo "╔════════════════════════════════════════╗"
echo "║   Bitrix Messenger Worker Status      ║"
echo "╚════════════════════════════════════════╝"
echo ""
# Количество запущенных worker'ов
WORKERS=$(ps aux | grep "[m]essenger:consume" | wc -l)
echo "Active Workers: $WORKERS"
# Размер очереди (если используется Redis)
if command -v redis-cli &> /dev/null; then
    QUEUE_SIZE=$(redis-cli LLEN bitrix:messenger:queue 2>/dev/null || echo "N/A")
    echo "Queue Size: $QUEUE_SIZE"
fi
# Uptime systemd service (если используется)
if systemctl is-active bitrix-messenger.service &> /dev/null; then
    UPTIME=$(systemctl status bitrix-messenger.service | \
             grep "Active:" | awk '{print $3, $4}')
    echo "Service Uptime: $UPTIME"
fi
# Последние ошибки
ERROR_COUNT=$(grep -c "ERROR" /var/log/bitrix-messenger.log 2>/dev/null || echo "0")
echo "Errors (24h): $ERROR_COUNT"
echo ""Troubleshooting 
Worker не запускается 
Проблема: Команда не запускается или сразу завершается
Решения:
- Проверьте настройки в 
.settings.php:run_modeдолжен бытьcli - Убедитесь, что модуль Messenger установлен и активен
 - Проверьте подключение к очереди (Redis/RabbitMQ)
 - Проверьте логи PHP и Битрикс
 
Сообщения не обрабатываются 
Проблема: Worker работает, но сообщения остаются в очереди
Решения:
- Проверьте логи worker'а на наличие ошибок
 - Увеличьте количество worker'ов
 - Уменьшите 
--sleepдля более частой обработки - Проверьте производительность сервера
 - Проверьте настройки очереди
 
Высокое потребление ресурсов 
Проблема: Worker потребляет много CPU/памяти
Решения:
- Увеличьте 
--sleepдля снижения частоты опроса - Уменьшите количество worker'ов
 - Оптимизируйте обработчики сообщений
 - Ограничьте ресурсы через systemd (LimitCPU, MemoryLimit)
 
Worker'ы дублируются 
Проблема: Запускается слишком много worker'ов
Решения:
- Используйте systemd или supervisor для управления
 - Добавьте проверку перед запуском
 - Используйте lock-файлы для предотвращения дублирования
 
Полезные советы 
💡 Используйте systemd/supervisor - для надежного управления worker'ами
💡 Мониторьте - отслеживайте работу worker'ов и размер очереди
💡 Масштабируйте - запускайте несколько worker'ов при высокой нагрузке
💡 Логируйте - ведите детальные логи для отладки
💡 Ограничивайте время - используйте --time-limit для периодического перезапуска
💡 Настройте алерты - получайте уведомления при проблемах
Смотрите также 
- Команды агентов - альтернатива для фоновых задач
 - Примеры cron - автоматизация запуска
 - Официальная документация Битрикс24 по Messenger