Управление соединениями с серверной базой 1С с командной строки


Управляет возможностью создания новых сеансов с базой данных, размещенной в кластере серверов 1С:Предприятия, а также принудительно завершает существующие сеансы.

Управление новыми сеансами производится путем установки с командной строки параметров базы данных, представленных в консоли управления кластером.

Существующие сеансы могут быть просто перечислены в логах, а могут быть частично или полностью завершены.

Скрипт общается по сети с серверными процессами 1С посредством объекта Vxx.COMConnector, запускать сервер администрирования не требуется.

Если для кластера не определены администраторы, следует явно указать параметры «/CU: /CP:» для «пустой» аутентикации, в противном случае аутентикация не будет производиться вообще, что допустимо только для пользователей, связанных с текущим пользователем операционной системы (это не работает для локальных пользователей ОС, если кластер размещен не на локальной машине).
Аналочично производится аутентикация пользователей агента и информационных баз. Для последних, кроме общего имени и пароля, вводимых до имени первой базы, можно указать после имени базы личные (аутентификация в API странная, такое ощущение, что можно свалить все именпа пользователей в кучу, а сервер разберет; у кого будут накладки или соображения по этому вопросу, прошу постить сюды).

Под 64-битной системой скрипт будет работать только в 32-битном интерпретаторе. Интерактивно открывается 32-битный CMD.EXE, а вот в назначенном задани нужно явно указать C:WindowsSysWOW64cmd.exe или C:WindowsSysWOW64cscript.exe, чтобы избежать ошибок при создании COM-объектов.

Если указать пользователя ИБ, не зарегистрированного в самой ИБ, скрипт завершится (вернее, умрет) без сообщений и кодов возврата.

Перенаправление стандартных потоков родительского процесса нужно делать конструкцией ‘1>FileName 2>&1’ а не ‘2>&1 1>FileName’, иначе STDErr перенаправляться не будет.
Также при перенаправлении в файл с кодировкой CP866 следует указать параметр /OutputCodepage:866, иначе весь вывод скрипта получится кракозябрами (в кодировке Win1251). При выводе на консоль этот параметр нужно убирать, так как CScript в этом случае перекодирует сам, а двойное преобразование приведет понятно к чему.

 

Пример использования скрипта с сервером 8.3.5 (вывод cmd-скрипта перенаправлен в файл, поэтому используется ключ /OC):

set RunShortcut=/RunShortcut ...ibases.v8i
set IBUser=...
set IBPassword=...
set AgentID=localhost:1541
set ClusterID=Локальный кластер
set DatabaseID=Development-Temp-Trade
set BackupID=Development.Temp.Trade
set Backup=X:Backup
set ParamsFor1C=/IBName "Development - Temp - Trade"
set Starter1C=C:Program Files (x86)1cv8common1cestart.exe
set CheckAndRepairParameters=-ReIndex -LogAndRefsIntegrity -RecalcTotals -IBCompression -BadRefCreate -BadDataCreate -UseStartPoint -TimeLimit:005:00

echo.
echo __________ %Date% %Time%: Обработка базы данных "%DatabaseID%" __________
for /F "tokens=1-3 delims=. " %%i in ("%Date%") do set Suffix=%%~k%%~j%%~i

set T=%Time::=%
if "%T:~0,1%"==" " (
    set Suffix=%Suffix%#k8SjZc9Dxk0%T:~1,-3%
) else (
    set Suffix=%Suffix%%T:~0,-3%
)

set ArcName=%Backup%\%BackupID%@%Suffix%

set LogParameters=/Out "%ArcName%.log" -NoTruncate
set CommonParameters=/N "%IBUser%" /P "%IBPassword%" /UC КодРазрешения /AllowExecuteScheduledJobs -Off /AppAutoInstallLastVersion- /DisableStartupMessages /DisableStartupDialogs

cscript //NoLogo as1cLockIBs.vbs /cv:V83 /ai:"%AgentID%" /ci:"%ClusterID%" /cu: /cp: /ibu:"%IBUser%" /ibp:"%IBPassword%" "%DatabaseID%" /ol:4 /ocp:866 /sp /as:n /aj:n /sc /ks /pc:КодРазрешения /dm:"Выполняется тестирование и архивация базы, сохраните данные закройте программу в течение 1 мин.!"

echo %Date% %Time%: "%DatabaseID%": Запуск архивации ИБ...
rem Параметр /ocp:866 лучше ставить первым, поскольку сообщения об ошибках командной строки предшествующих параметров перекодированы не будут
cscript //NoLogo WaitForProcessTree.vbs /ocp:866 /ol:4 "%Starter1C%" DESIGNER %RunShortcut% %ParamsFor1C% %CommonParameters% /DumpIB "%ArcName%.dt" %LogParameters%
echo %Date% %Time%: "%DatabaseID%": Код возврата: %ErrorLevel%

echo %Date% %Time%: "%DatabaseID%": Запуск тестирования ИБ...
cscript //NoLogo WaitForProcessTree.vbs /ocp:866 /ol:4 "%Starter1C%" DESIGNER %RunShortcut% %ParamsFor1C% %CommonParameters% /IBCheckAndRepair %CheckAndRepairParameters% %LogParameters%
echo %Date% %Time%: "%DatabaseID%": Код возврата: %ErrorLevel%

echo %Date% %Time%: "%DatabaseID%": Разрешение подключений к ИБ...
cscript //NoLogo as1cLockIBs.vbs /cv:V83 /ai:"%AgentID%" /ci:"%ClusterID%" /cu: /cp: /ibu:"%IBUser%" /ibp:"%IBPassword%" "%DatabaseID%" /ol:4 /ocp:866 /sp /as /aj

 

Это кусок процуедуры, вырванный из контекста рабочего скрипта. Естественно, придется допиливать, но в качестве пример имхо сойдет — прошу сильно не пинать.

7 Comments

  1. insurgut

    Зачем изобретать велосипед, если есть консоль кластера?

    Reply
  2. VGHOST

    (1) insurgut, скрипт предназначен для автоматизации, а не для мышевождения.

    Предпочитаю иметь 10 велосипедов, которые будут делать работу за меня, вместо 1 консоли кластера, которая позволит мне делать работу за сервер. Вообще, меня весьма удивляют одмины, которым хватает терпения изо дня в день, из года в год заходить ночами на сервер, чтобы нажать одни и те же кнопки. Впрочем, на вкус и цвет…

    Если же имелось в виду автоматическое управление 1С-ом при помощи 1С-ных обработок… это уже не велосипед, это Карлсон получается. Который живет на крыше. С кнопкой для самовыключения. Верх быстродействия, надежности и удобства. Никаких ненужных промежуточных компонент, и ресурсов почти не потребляет. Как то так…

    Reply
  3. AlX0id

    Мне кажется, что было бы перспективнее сделать Powershell-овский скрипт — не пришлось бы вкрячивать разнообразные велосипеды типа cscript и разрешать выполнять на сервере vbs..

    Reply
  4. Evil Beaver

    (3) AlX0id, файлы powershell тоже надо разрешать выполнять, если я ничего не путаю.

    Reply
  5. VGHOST

    (3) AlX0id, Велосипед WSH появился несколько раньше велосипеда PS, и его педалей для этой задачи вполне достаточно.

    Мое мнение по поводу последнего я подробно изложил тут, если оно кому-то интересно.

    Единственное, что уже сильно напрягает при разработке скриптов такого размера — отсутствие отладчика.

    И, к слову, мне ни разу не приходилось разрешать scsript на серверах, наверное сервера попадались неправильные 🙂

    А что до перспектив — хочется интерпретатор, который смог бы выполнять скрипты (с небольшим слоем системных абстракций) еще и на линуксе, да еще делал бы байткод (а-ля Питон или Жаба), и до завершения изысканий в этом направлении бросаться с головой в ms/win-only PS рука не подымается… да и нога тоже ленится…

    Reply
  6. Spoke37

    Здравствуйте.

    Под 64-битным интерпретатором (который по-умолчанию запускается) никак нельзя заставить работать?

    Reply
  7. VGHOST

    (6) Spoke37, Используемые библиотеки 32-битные, 1С других не предоставил… под Windows, по крайней мере…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *