Как принудительно завершить сеансы пользователей на 64-разрядном сервере 1С 8.3 для автоматического создания бэкапов?

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

Автоматизация ночного архивирования баз 1С в формат .dt часто сталкивается с проблемой "зависших" или просто активных сеансов пользователей. На 64-разрядных серверах стандартный перезапуск службы 1C:Enterprise 8.3 Server Agent не всегда приводит к желаемому результату, так как рабочие процессы rphost.exe могут удерживать соединения дольше положенного или некорректно завершаться. Рассмотрим подробнее, как решить эту задачу профессиональными методами, не ограничиваясь простыми командами остановки службы.

Метод 1. Использование сервера администрирования RAS и утилиты RAC

Для 64-разрядных систем наиболее правильным и "чистым" способом управления кластером является использование связки из сервера администрирования ras и консольной утилиты rac. Этот инструмент позволяет программно выполнять любые действия, доступные в интерактивной консоли администрирования.

Шаг 1. Запуск службы RAS. Проанализируем состояние сервера: чтобы команды rac работали, на сервере должна быть запущена служба ras.exe. Если она не установлена, ее можно зарегистрировать как системную службу командой:


sc create "1C:Enterprise 8.3 Administration Server" binPath= "C:\Program Files\1cv8\8.3.X.XXXX\bin\ras.exe cluster --service" start= auto

Шаг 2. Использование команд RAC в батнике. Разберем по шагам логику скрипта. Сначала нам необходимо получить идентификатор кластера, а затем — список сеансов для их завершения. Пример команды для получения списка сеансов выглядит так:

rac session --cluster=<ID_Кластера> list --infobase=<ID_Базы>

Чтобы завершить конкретный сеанс, используем команду terminate:

rac session --cluster=<ID_Кластера> terminate --session=<ID_Сеанса>

Для полной автоматизации в батнике можно реализовать цикл, который считывает вывод команды list и последовательно закрывает все найденные сеансы. Это гарантирует, что база будет освобождена перед началом выгрузки .dt.

Метод 2. Программное управление через COM-соединение

Если вы предпочитаете использовать скрипты на языке VBScript или PowerShell, можно воспользоваться объектом V83.COMConnector. Этот метод позволяет более гибко управлять процессом, например, уведомлять пользователей перед отключением.

Проанализируем примерный алгоритм работы такого скрипта:

  1. Создаем объект V83.COMConnector.
  2. Устанавливаем соединение с агентом сервера (ConnectAgent).
  3. Проходим циклом по всем рабочим процессам и информационным базам.
  4. Вызываем метод GetSessions(), чтобы получить массив активных пользователей.
  5. Для каждого сеанса вызываем TerminateSession().

Важный нюанс для 64-разрядных систем: убедитесь, что библиотека comcntr.dll зарегистрирована в системе корректно. Если ваш скрипт запускается в 64-битном окружении, он должен обращаться к соответствующей версии компоненты. Выясним причину возможных ошибок: часто они связаны с тем, что 32-битный скрипт пытается вызвать 64-битную компоненту без настройки COM+ приложений.

Метод 3. Установка блокировки соединений

Просто "выбросить" пользователей недостаточно. Если конфигурация пользователя настроена на автоматическое переподключение, его клиентское приложение попытается войти в базу снова через несколько секунд. Поэтому перед удалением сеансов необходимо установить блокировку установки новых соединений.

Рассмотрим, как это сделать через rac:


rac infobase --cluster=<ID> update --sessions-denied=on --scheduled-jobs-denied=on --infobase=<ID> --permission-code=MySecretCode

Параметр permission-code (код разрешения) критически важен. Он позволит вашему скрипту архивирования подключиться к базе в обход блокировки. При запуске конфигуратора для выгрузки .dt используйте ключ /UC:


"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "Server\BaseName" /N "Admin" /P "Pass" /DumpIB "C:\Backup\base.dt" /UC MySecretCode

Метод 4. Принудительное завершение процессов (Taskkill)

В ситуациях, когда служба 1С "зависла" и не реагирует на команды управления, системные администраторы прибегают к радикальному методу — принудительному завершению процессов rphost.exe. Посмотрим на пример команды:

taskkill /f /im rphost.exe

Внимание: это "грязный" метод. На 64-разрядном сервере один rphost может обслуживать множество баз данных. Убивая процесс, вы прерываете работу всех пользователей во всех базах данного кластера. Используйте это только в крайнем случае и только в ночное время, когда риск повреждения кэша минимален, а перед этим обязательно выполняйте net stop для службы агента.

Рекомендации по стратегии резервного копирования

Несмотря на то, что задача автоматизации выгрузки .dt решаема, стоит прислушаться к советам опытных коллег. Для базы размером более 10-20 Гб (в вашем случае — 50 Гб) выгрузка в .dt становится крайне долгой и рискованной операцией. Проанализируем преимущества перехода на SQL-бэкапы:

Если же бизнес-требования жестко диктуют наличие именно .dt файлов (например, для передачи в облако или разработки), используйте связку RAC + Блокировка сеансов + Код разрешения /UC. Это наиболее профессиональный подход к автоматизации на платформе 1С 8.3.

← На главную