Решение проблемы таймаутов и "Broken pipe" в командах rac 1С
Дата: 2026-01-25
Контейнер: 1c-server-new
Версия 1С: 8.3.27.1989
Проблема: Команды rac infobase summary list и rac server list уходят в таймаут, в выводе rac есть сообщение "Broken pipe"
Обнаруженная проблема
Симптомы
- ✅ Регистрация базы
prod_devзавершена (скрипт сообщил об успехе) - ❌ База
prod_devНЕ найдена в конфигурации кластера (/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst) - ❌ Команды
rac infobase summary listиrac server listуходят в таймаут - ❌ Команда
rac cluster listвозвращает "Ошибка установки соединения с кластером серверов" - ⚠️ В выводе rac есть сообщение "Broken pipe" — указывает на нестабильность соединения
Диагностика
Проверка портов:
lxc exec 1c-server-new -- ss -tlnp | grep -E '1540|1541|1545'
Результат:
- ✅ Порт 1545 (RAS) — слушает
- ❌ Порт 1540 (ragent) — НЕ слушает (хотя процесс запущен)
- ❌ Порт 1541 (rmngr) — НЕ слушает (хотя процесс запущен)
Проверка процессов:
lxc exec 1c-server-new -- ps aux | grep -E 'ragent|rmngr|ras'
Результат:
- ✅ ragent — запущен (PID: 50634)
- ✅ rmngr — запущен (PID: 50651)
- ✅ ras — запущен (PID: 22441)
Проблема: Процессы запущены, но порты не слушают. Это указывает на проблему с инициализацией или привязкой к портам.
Причина проблемы
Основная причина
Процессы ragent и rmngr запущены, но не могут привязаться к портам 1540 и 1541. Это может быть из-за:
- Неполная инициализация кластера — кластер создан, но компоненты не полностью инициализированы
- Проблемы с правами доступа — процессы не могут привязаться к портам
- Конфликт портов — порты заняты другими процессами (маловероятно, т.к.
ssне показывает их) - Проблемы с конфигурацией сети в контейнере — LXD контейнер может иметь ограничения
Вторичные проблемы
- База
prod_devне зарегистрирована — несмотря на сообщение скрипта об успехе, база не появилась в конфигурации кластера - Таймауты команд rac — из-за недоступности портов 1540 и 1541 команды не могут установить соединение
- "Broken pipe" — следствие нестабильного соединения с кластером
Решения
Решение 1: Перезапуск сервисов с ожиданием инициализации (рекомендуется первым)
Шаги:
- Остановить сервисы:
lxc exec 1c-server-new -- systemctl stop srv1cv8-8.3.27.1989@default.service
lxc exec 1c-server-new -- systemctl stop ras-8.3.27.1989.service
- Подождать полной остановки:
sleep 5
- Запустить сервисы:
lxc exec 1c-server-new -- systemctl start ras-8.3.27.1989.service
lxc exec 1c-server-new -- systemctl start srv1cv8-8.3.27.1989@default.service
- Подождать инициализации (30-60 секунд):
sleep 30
- Проверить порты:
lxc exec 1c-server-new -- ss -tlnp | grep -E '1540|1541|1545'
- Проверить кластер:
lxc exec 1c-server-new -- timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545
Ожидаемый результат:
- Порты 1540, 1541, 1545 слушают
- Команда rac cluster list возвращает информацию о кластере
Решение 2: Проверка и восстановление конфигурации кластера
Если порты все еще не слушают:
- Проверить конфигурацию кластера:
lxc exec 1c-server-new -- cat /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst | head -20
- Проверить права доступа:
lxc exec 1c-server-new -- ls -la /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/
- Проверить логи ragent:
lxc exec 1c-server-new -- journalctl -u srv1cv8-8.3.27.1989@default.service --no-pager -n 100 | grep -i 'error\|fail\|bind\|port'
Решение 3: Пересоздание кластера (если предыдущие не помогли)
⚠️ ВНИМАНИЕ: Это удалит текущую конфигурацию кластера. Убедитесь, что у вас есть резервная копия.
Шаги:
- Остановить сервисы:
lxc exec 1c-server-new -- systemctl stop srv1cv8-8.3.27.1989@default.service
lxc exec 1c-server-new -- systemctl stop ras-8.3.27.1989.service
- Создать резервную копию конфигурации:
lxc exec 1c-server-new -- bash -c "cp -r /home/usr1cv8/.1cv8/1C/1cv8/reg_1541 /home/usr1cv8/.1cv8/1C/1cv8/reg_1541.backup.$(date +%Y%m%d_%H%M%S)"
- Очистить конфигурацию (опционально, только если нужно):
# Только если предыдущие решения не помогли
lxc exec 1c-server-new -- bash -c "rm -rf /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/*"
- Запустить сервисы:
lxc exec 1c-server-new -- systemctl start ras-8.3.27.1989.service
lxc exec 1c-server-new -- systemctl start srv1cv8-8.3.27.1989@default.service
sleep 10
- Пересоздать кластер:
lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac cluster insert --host=localhost --port=1541 --name=cluster1 localhost:1545"
- Проверить кластер:
lxc exec 1c-server-new -- timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545
- Повторно зарегистрировать базу данных:
cd /home/cdto/DENKART
# Установить переменные окружения
export DB_NAME=prod_dev
export DB_SERVER=10.218.14.79
export DB_USER=usr1cv8
export DB_PASSWORD=$(./scripts/get-secret.sh POSTGRES_1C_PASSWORD)
export INFOBASE_NAME=prod_dev
export LOCALE=ru_RU
# Запустить скрипт регистрации
./scripts/register_1c_infobase.sh 1c-server-new
Решение 4: Проверка регистрации базы prod_dev
После восстановления соединения с кластером:
- Проверить наличие базы в кластере:
lxc exec 1c-server-new -- bash -c "grep -i prod_dev /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst"
- Если база не найдена, зарегистрировать вручную:
# Получить UUID кластера
CLUSTER_UUID=$(lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545 | grep '^cluster' | awk '{print \$3}'")
# Получить пароль
PGPASS=$(./scripts/get-secret.sh POSTGRES_1C_PASSWORD)
# Зарегистрировать базу
lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac infobase create \
--name=prod_dev \
--dbms=PostgreSQL \
--db-server=10.218.14.79 \
--db-name=prod_dev \
--db-user=usr1cv8 \
--db-pwd='$PGPASS' \
--locale=ru_RU \
--cluster=$CLUSTER_UUID \
localhost:1545"
- Проверить регистрацию:
lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac infobase summary list localhost:1545"
Проверка работоспособности
После применения решений
- Проверить порты:
lxc exec 1c-server-new -- ss -tlnp | grep -E '1540|1541|1545'
Ожидается: Все три порта слушают
- Проверить кластер:
lxc exec 1c-server-new -- timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545
Ожидается: Вывод информации о кластере без ошибок
- Проверить рабочие серверы:
CLUSTER_UUID=$(lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545 | grep '^cluster' | awk '{print \$3}'")
lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac server list --cluster=$CLUSTER_UUID localhost:1545"
Ожидается: Список рабочих серверов без таймаутов
- Проверить информационные базы:
lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac infobase summary list localhost:1545"
Ожидается: Список баз данных, включая prod_dev, без таймаутов
- Проверить базу в конфигурации:
lxc exec 1c-server-new -- bash -c "grep -i prod_dev /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst"
Ожидается: Найдена запись о базе prod_dev
Профилактика
Рекомендации для предотвращения проблемы
- Мониторинг портов:
- Регулярно проверять, что порты 1540, 1541, 1545 слушают
-
Настроить мониторинг через скрипт или систему мониторинга
-
Правильная последовательность запуска:
- Сначала запускать RAS (порт 1545)
- Затем запускать ragent (порт 1540)
-
Дождаться полной инициализации перед использованием rac команд
-
Резервное копирование конфигурации:
- Регулярно создавать резервные копии
/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/ -
Особенно перед изменениями конфигурации кластера
-
Логирование:
- Регулярно проверять логи сервисов на наличие ошибок
- Настроить ротацию логов
Связанные документы
- Итоговый синтаксис rac — синтаксис команд rac
- Проблема ClusterConfigService — решение проблем с регистрацией рабочего сервера
- Финальный статус 1С — текущий статус настройки сервера
- Скрипт регистрации базы — скрипт для регистрации информационных баз
Статус: ⚠️ Требуется применение решений
Приоритет: Высокий
Дата последнего обновления: 2026-01-25