gifts2017

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

Опубликовал Сергей Хоменко (VGHOST) в раздел Администрирование - Архивирование (backup)

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

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

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

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

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

Под 64-битной системой скрипт будет работать только в 32-битном интерпретаторе. Интерактивно открывается 32-битный CMD.EXE, а вот в назначенном задани нужно явно указать C:\Windows\SysWOW64\cmd.exe или C:\Windows\SysWOW64\cscript.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)\1cv8\common\1cestart.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%^0%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

 

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
as1cLockIBs.vbs
.vbs 46,52Kb
04.05.15
6
.vbs 1.0.1 46,52Kb 6 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Анянов Михаил (insurgut) 04.05.15 11:20
Зачем изобретать велосипед, если есть консоль кластера?
2. Сергей Хоменко (VGHOST) 04.05.15 17:08
(1) insurgut, скрипт предназначен для автоматизации, а не для мышевождения.
Предпочитаю иметь 10 велосипедов, которые будут делать работу за меня, вместо 1 консоли кластера, которая позволит мне делать работу за сервер. Вообще, меня весьма удивляют одмины, которым хватает терпения изо дня в день, из года в год заходить ночами на сервер, чтобы нажать одни и те же кнопки. Впрочем, на вкус и цвет...
Если же имелось в виду автоматическое управление 1С-ом при помощи 1С-ных обработок... это уже не велосипед, это Карлсон получается. Который живет на крыше. С кнопкой для самовыключения. Верх быстродействия, надежности и удобства. Никаких ненужных промежуточных компонент, и ресурсов почти не потребляет. Как то так...
dj_serega; afanasko; +2 Ответить
3. Алексей 1 (AlX0id) 05.05.15 10:55
Мне кажется, что было бы перспективнее сделать Powershell-овский скрипт - не пришлось бы вкрячивать разнообразные велосипеды типа cscript и разрешать выполнять на сервере vbs..
4. Андрей Овсянкин (Evil Beaver) 05.05.15 18:07
(3) AlX0id, файлы powershell тоже надо разрешать выполнять, если я ничего не путаю.
5. Сергей Хоменко (VGHOST) 05.05.15 19:43
(3) AlX0id, Велосипед WSH появился несколько раньше велосипеда PS, и его педалей для этой задачи вполне достаточно.
Мое мнение по поводу последнего я подробно изложил тут, если оно кому-то интересно.
Единственное, что уже сильно напрягает при разработке скриптов такого размера - отсутствие отладчика.
И, к слову, мне ни разу не приходилось разрешать scsript на серверах, наверное сервера попадались неправильные :)

А что до перспектив - хочется интерпретатор, который смог бы выполнять скрипты (с небольшим слоем системных абстракций) еще и на линуксе, да еще делал бы байткод (а-ля Питон или Жаба), и до завершения изысканий в этом направлении бросаться с головой в ms/win-only PS рука не подымается... да и нога тоже ленится...
6. Бенджамин Спок (Spoke37) 02.06.15 11:27
Здравствуйте.
Под 64-битным интерпретатором (который по-умолчанию запускается) никак нельзя заставить работать?
7. Сергей Хоменко (VGHOST) 02.06.15 20:06
(6) Spoke37, Используемые библиотеки 32-битные, 1С других не предоставил... под Windows, по крайней мере...
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа