Команды 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