Почему не работает RAC в 1С и возникает ошибка "Already open"?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При администрировании сервера 1С:Предприятие на базе ОС Linux (например, Rocky Linux) с использованием консольной утилиты rac системные администраторы нередко сталкиваются с ошибкой соединения. Разберем типичную ситуацию: сервер развернут, кластер работает, доступ через толстый и тонкий клиент есть, но при попытке получить список информационных баз через RAC в консоль выводится ошибка Already open и обращение к непонятному адресу, например list:1545.

Проанализируем причины такого поведения платформы и по шагам настроим правильное взаимодействие компонентов администрирования.

Разберем причины ошибки

Ошибка возникает из-за строго позиционного синтаксиса встроенного парсера утилиты rac. Многие пользователи по привычке формируют команду аналогично другим консольным инструментам, передавая аргументы в произвольном порядке, например:

/opt/1cv8/x86_64/8.3.27.1559/rac infobase --cluster=server1c:1541 list

В структуре вызова rac действие (в данном случае list) должно идти строго до параметров действия (аргументов с дефисами). Правильный порядок выглядит так:

  1. Вызов утилиты rac
  2. Режим (например, infobase или cluster)
  3. Действие (например, list или summary list)
  4. Параметры действия (например, --cluster=...)
  5. Адрес и порт сервера RAS (например, localhost:1545)

Если нарушить этот порядок и указать команду list в самом конце после параметров с дефисами, парсер прекращает разбор флагов. Первое попавшееся нераспознанное слово (в нашем случае list) он принимает за имя сетевого узла сервера RAS с портом по умолчанию 1545. Так и формируется фиктивный адрес list:1545.

Само сообщение Already open генерируется сетевой библиотекой Boost.Asio, которую использует платформа 1С. Оно появляется при попытке повторно открыть сокет в процессе неудачного разрешения этого фиктивного сетевого имени хоста.

Правильный синтаксис команды RAC

Выясним, как правильно сформировать запрос. Важно помнить, что клиент администрирования rac подключается не напрямую к менеджеру кластера (порт 1541), а к серверу администрирования ras (порт 1545). Кроме того, в параметр --cluster передается не адрес сервера, а уникальный идентификатор (UUID) кластера.

Сначала узнаем идентификатор кластера. Выполним команду:

rac cluster list server1c:1545

Из полученного ответа необходимо скопировать GUID из поля cluster. Теперь соберем правильную команду для получения списка информационных баз:


/opt/1cv8/x86_64/8.3.27.1559/rac infobase summary list --cluster=<Ваш_UUID_кластера> localhost:1545

Если утилита запускается локально на том же сервере, адрес localhost:1545 в конце можно опустить — по умолчанию rac сам обратится к локальному порту 1545.

Проверка и запуск службы RAS

Для того чтобы работал клиент rac, в системе обязательно должен быть запущен сервер администрирования ras. По умолчанию после установки сервера 1С на Linux служба RAS не запущена и отсутствует в автозагрузке.

Настроим её запуск через systemd. В комплекте платформы уже предусмотрен готовый шаблон юнита. Выполним следующие команды (с учетом вашей версии платформы, в примере — 8.3.27.1559):


systemctl link /opt/1cv8/x86_64/8.3.27.1559/ras-8.3.27.1559.service
systemctl daemon-reload
systemctl enable --now ras-8.3.27.1559.service

Если служба запускается вручную или настраивается в собственном юните, команда выглядит так:

/opt/1cv8/x86_64/8.3.27.1559/ras cluster --daemon --port=1545 localhost:1540

Обратите внимание на порты: сервер RAS связывается с агентом кластера ragent, который работает на порту 1540. Передача порта менеджера кластера (1541) при запуске RAS приведет к ошибкам взаимодействия.

Важные нюансы настройки и безопасности

Рассмотрим дополнительные аспекты, которые необходимо учитывать при работе с утилитами администрирования:

  1. Версионность: Версии службы RAS и сервера 1С должны строго совпадать вплоть до номера сборки. При каждом обновлении платформы службу RAS требуется переключать на исполняемый файл нового релиза.
  2. Аутентификация: Если в кластере уже созданы администраторы, выполнение команд потребует дополнительных параметров. Например, для администратора кластера добавьте ключи --cluster-user=<имя> и --cluster-pwd=<пароль>.
  3. Сетевой экран: На дистрибутивах семейств RHEL / Rocky Linux активен firewalld. Если планируется вызывать rac удаленно с других рабочих станций, необходимо явно открыть порт 1545 протокола TCP:
    
    firewall-cmd --permanent --add-port=1545/tcp
    firewall-cmd --reload
    

Альтернативные варианты управления

Если работа в консоли кажется неудобной, рассмотрим другие инструменты, которые также взаимодействуют со службой RAS или агентом кластера:

Внимательно следите за синтаксисом команд rac и состоянием службы ras, и ошибки вроде Already open больше не будут блокировать вашу работу с кластером серверов 1С.

← На главную