Как программно удалить сеансы информационной базы через RAS на сервере 1С под управлением Linux?

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

При администрировании крупных систем на базе 1С:Предприятие часто возникает необходимость автоматизировать процесс завершения активных сеансов. Это может потребоваться для выполнения регламентных операций, обновления конфигурации или принудительного освобождения лицензий в ночное время. Однако при работе в среде Linux разработчики часто сталкиваются со специфическими ошибками аутентификации, даже если пароли указаны верно. В этой статье мы подробно разберем, как реализовать удаление сеансов через сервер администрирования (RAS) и устранить типичную ошибку cluster administrator is not authenticated.

Анализ проблемы и постановка задачи

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

Проанализируем программный код, который инициирует этот процесс. Как правило, работа строится на заполнении структур параметров администрирования и вызове методов общего модуля АдминистрированиеКластераКлиентСервер.


&НаСервере
Процедура НайтиИУничтожитьСеансыНаСервере()
    // Определяем типы клиентов, которые подлежат отключению
    КлиентскиеПриложения = Новый Массив;
    КлиентскиеПриложения.Добавить(ВРег("1CV8")); // Толстый клиент 
    КлиентскиеПриложения.Добавить(ВРег("1CV8C")); // Тонкий клиент
    КлиентскиеПриложения.Добавить(ВРег("WebClient")); // Web-клиент
    КлиентскиеПриложения.Добавить(ВРег("COMConnection")); // Внешнее соединение
    
    // Получаем список всех текущих сеансов информационной базы
    СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы();
    НомераСеансов = Новый Массив;
    
    Для Каждого СеансИБ Из СеансыИнформационнойБазы Цикл
        // Проверяем, соответствует ли приложение нашему списку
        Если КлиентскиеПриложения.Найти(ВРег(СеансИБ.ИмяПриложения)) <> Неопределено Тогда
            // Например, отсекаем сеансы, начатые ранее текущего дня
            Если СеансИБ.НачалоСеанса < НачалоДня(ТекущаяДата()) Тогда
                НомераСеансов.Добавить(СеансИБ.НомерСеанса);
            КонецЕсли;    
        КонецЕсли;    
    КонецЦикла;    
    
    Если НомераСеансов.Количество() > 0 Тогда
        // Настройка параметров подключения к RAS (Remote Administration Server)
        ПараметрыАдминистрирования = Новый Структура();
        ПараметрыАдминистрирования.Вставить("ТипПодключения", "RAS"); 
        ПараметрыАдминистрирования.Вставить("АдресСервераАдминистрирования", "192.168.1.100");
        ПараметрыАдминистрирования.Вставить("ПортСервераАдминистрирования", 1545);
        ПараметрыАдминистрирования.Вставить("ПортКластера", 1541);
        
        // Указываем учетные данные администратора кластера
        ПараметрыАдминистрирования.Вставить("ИмяАдминистратораКластера", "SupUser");
        ПараметрыАдминистрирования.Вставить("ПарольАдминистратораКластера", "P@ssword123");
        
        // Настройка параметров информационной базы
        ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера();
        ПараметрыАдминистрированияИБ.ИмяВКластере = "WorkBase";
        ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы = "AdminIB";
        ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы = "IBPass";
        
        // Формируем фильтр по номерам сеансов
        СтруктураСеанса = Новый Структура;
        СтруктураСеанса.Вставить("Свойство", "Номер");
        СтруктураСеанса.Вставить("ВидСравнения", ВидСравнения.ВСписке);
        СтруктураСеанса.Вставить("Значение", НомераСеансов);
        Фильтр = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтруктураСеанса);
        
        // Выполняем удаление через БСП
        АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования, ПараметрыАдминистрированияИБ, Фильтр);
    КонецЕсли;    
КонецПроцедуры

Причина ошибки: "Cluster administrator is not authenticated"

Выясним, почему при выполнении этого кода возникает ошибка аутентификации. Особенность серверов 1С на Linux заключается в том, что по умолчанию в свежесозданном кластере список администраторов пуст. В операционной системе Windows консоль администрирования часто позволяет выполнять действия под текущей учетной записью системы или "неявным" администратором. В Linux при использовании RAS (Remote Administration Server) ситуация иная.

Важный нюанс: Если в кластере не создано ни одного администратора, некоторые команды могут выполняться, но как только вы пытаетесь передать конкретное имя пользователя (например, "SupUser"), сервер начинает проверять его в своем внутреннем списке. Если такого пользователя физически не существует в настройках кластера, аутентификация не пройдет.

Рассмотрим, как проверить это через консоль Linux с помощью утилиты rac. Попробуем получить список баз данных, используя параметры администратора:

sudo "/opt/1C/v8.3/x86_64/rac" 192.168.1.100:1545 infobase summary --cluster="UUID-кластера" --cluster-user=SupUser --cluster-pwd=xxxx list

Если в ответ вы получаете Error of administration operation: Cluster administrator is not authenticated, значит, в самом кластере 1С необходимо явно создать администратора с указанным именем и паролем.

Пошаговое решение проблемы

Для исправления ситуации выполним следующие шаги:

  1. Создание администратора кластера: Зайдите в консоль администрирования 1С (на Windows-клиенте или через Linux-инструменты) и в ветке "Администраторы" вашего кластера создайте нового пользователя (например, SupUser). Назначьте ему пароль и полные права на управление кластером.
  2. Проверка через RAC: После создания пользователя повторите команду в консоли сервера. Вы должны увидеть список информационных баз. Это подтвердит, что RAS корректно принимает учетные данные.
  3. Корректировка кода 1С: Убедитесь, что в структуре ПараметрыАдминистрирования значения ключей ИмяАдминистратораКластера и ПарольАдминистратораКластера в точности соответствуют созданным в консоли.
  4. Настройка RAS как службы: Для стабильной работы регламентного задания убедитесь, что демон ras запущен и слушает нужный порт (по умолчанию 1545). В Linux это обычно проверяется командой systemctl status srv1cv8-ras.

Дополнительные рекомендации по автоматизации в Linux

Проанализируем еще несколько технических моментов, которые помогут сделать решение более надежным:

Безопасность паролей: Передача пароля в открытом виде в параметрах команды (--cluster-pwd) небезопасна, так как он может отобразиться в истории команд или списке процессов. В промышленной эксплуатации старайтесь использовать механизмы защиты данных или переменные окружения, если это поддерживается вашей версией платформы.

Работа с типами клиентов: При удалении сеансов важно не "выстрелить себе в ногу". Обратите внимание на закомментированные строки в примере кода:

Использование новых возможностей: Начиная с последних версий платформы 8.3 (в частности 8.3.15 и выше), 1С предоставляет HTTP-интерфейс администрирования. Если ваша конфигурация и платформа позволяют, рассмотрите переход с RAS на HTTP-запросы. Это позволит управлять кластером без использования COM-объектов (которые не работают в Linux) и без вызова внешних исполняемых файлов через КомандаСистемы.

Таким образом, ключевым фактором успеха при удалении сеансов на Linux является наличие явно созданного администратора кластера и корректная настройка параметров соединения с сервером администрирования RAS.

← На главную