|
Скрипт архивирования файловых баз
|
|||
---|---|---|---|
#18+
Накорябал скрипт в PowerShell для архивации - идея простая - подключается к базе, база блокируется средставами БСП и из нее выкидываются юзеры - если это удачно (процесс выгона завершается до истечение таймаута) формируется полный бэкап средствами 1С и файл dt заворачивается в архив через 7zip, если не удачно (процесс блокировки и выпиливания юзеров через БСП провисел весь отпущенный ему период) - формируется "грязная копия" средствами архиватора 7zip. Потом - разблокировка, чтобы утром могли зайти юзеры. Скрипт запускаются ночью по виндовому шедулеру. Базы - типовые БП и ЗУП Вопрос - почему львиная доля архивов - "грязная копия"? Т.е. пользователи не выгоняются средствами самой конфигурации? Их еще как-то донастраивать надо - типа запретить задавать вопрос о выходе из 1С? Скрипт правильный - если его запускать "руками" - пользователи "выпиливаются", формируется архив. А автоматически - фиговничает? Запускается от имени лок. админа с "высокими привелегиями". <# СЛУЖЕБНЫЕ ФУНКЦИИ СКРИПТА #> #region #снять блокировку с базы 1С function Unlock_IB($_1C_UnlockIB_command) { Start-Process -FilePath "$_1C_ThinClient_file" -Wait -ArgumentList $_1C_UnlockIB_command } # создать полноценный архив (dt) средствами 1С function MakeFullBackup($_1C_DumbIB_command, $_7zip_FullArhive_command) { #ожидание 2 минуты Start-Sleep -Seconds 120 Start-Process -FilePath "$_1C_ThickClient_file" -Wait -ArgumentList $_1C_DumbIB_command Start-Process -FilePath "$_7zip_Current_file" -Wait -ArgumentList $_7zip_FullArhive_command } # создать грязный архив (1cd) средствами 7zip function MakeDirtBackup($_7zip_DirtArhive_command) { Start-Process -FilePath "$_7zip_Current_file" -Wait -ArgumentList $_7zip_DirtArhive_command } #архивирование файловой базы 1С function MakeBackup($ArchiveBaseDir, $BaseDir, $Login, $Password) { #текущая дата в формате для имен файлов $CurDate = Get-Date -Format "yyy_MM_dd_HH_mm_ss" #полный каталог архива базы $ArchiveBasePath = Join-Path -Path $_1CArchive_dir -ChildPath $ArchiveBaseDir #файл логировая работы данного скрипта $JobLog_file = Join-Path -Path $ArchiveBasePath -ChildPath "Job_$CurDate.log" #файл логировая архивации базы средствами 1С $_1CLog_file = Join-Path -Path $ArchiveBasePath -ChildPath "1C_Backup_$CurDate.log" #файл 1CD базы 1С $_1C_1CD_file = Join-Path -Path $BaseDir -ChildPath "1Cv8.1CD" #файл архива базы средствами 1С $_1C_IBDumb_file = Join-Path -Path $ArchiveBasePath -ChildPath "$($ArchiveBaseDir)_$($CurDate).dt" #файл архива 7zip средствами 1С $_7zip_FullArhive_file = Join-Path -Path $ArchiveBasePath -ChildPath "1C_Backup_$($ArchiveBaseDir)_$($CurDate).zip" #файл грязного архива 7zip средствами 7zip $_7zip_DirtArhive_file = Join-Path -Path $ArchiveBasePath -ChildPath "1C_Backup_$($ArchiveBaseDir)_$($CurDate)_Dirt.zip" #команда блокровки базы 1С средствами БСП $_1C_LockIB_command = "ENTERPRISE /F""$BaseDir"" /N""$Login"" /P""$Password"" /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей" #команда создания выгрузки базы 1С $_1C_DumbIB_command = "CONFIG /F""$BaseDir"" /N""$Login"" /P""$Password"" /UCКодРазрешения /Out""$_1CLog_file"" /DumpIB""$_1C_IBDumb_file""" #команда архивации выгрузки базы 1С средствами 7zip $_7zip_FullArhive_command = "a -tzip -sdel -y ""$_7zip_FullArhive_file"" ""$_1C_IBDumb_file""" #команда архивации базы 1С (грязный архив) $_7zip_DirtArhive_command = "a -tzip -ssw -y ""$_7zip_DirtArhive_file"" ""$_1C_1CD_file""" #команда снятия блокировки базы 1С средставами БСП $_1C_UnlockIB_command = "ENTERPRISE /F""$BaseDir"" /N""$Login"" /P""$Password"" /WA- /AU- /CРазрешитьРаботуПользователей /UCКодРазрешения" #если каталога нет - создаем If (-Not(Test-Path $ArchiveBasePath)) { New-Item $ArchiveBasePath -ItemType directory } #создание файла логирования работы скрипта if (-Not(Test-Path $JobLog_file)) { New-Item $JobLog_file } #снять блокировку с базы возможно скрипт уже выполнялся неудачно Unlock_IB -_1C_UnlockIB_command $_1C_UnlockIB_command #блокировка базы Add-Content $JobLog_file -Value "$(Get-Date -Format "dd-MM-yyy HH:mm:ss") - Попытка блокировки базы" $process = Start-Process -FilePath $_1C_ThinClient_file -PassThru -ArgumentList $_1C_LockIB_command #ожидаем завершения процесса блокировки 10 минут Wait-Process $process.Id -Timeout 600 If($process.HasExited) { #процесс блокировки завершен успешно - делаем полную копию средствами 1С (dt) Add-Content $JobLog_file -Value "$(Get-Date -Format "dd-MM-yyy HH:mm:ss") - Полный архив средствами 1С (dt)" MakeFullBackup -_1C_DumbIB_command $_1C_DumbIB_command -_7zip_FullArhive_command $_7zip_FullArhive_command } else { #процесс блокировки завис - делаем грязную копию средствами 7zip (1cd) # снять процесс блокировки Stop-Process -Id $process.Id Add-Content $JobLog_file -Value "$(Get-Date -Format "dd-MM-yyy HH:mm:ss") - Грязный архив средствами 7zip (1cd)" MakeDirtBackup -_7zip_DirtArhive_command $_7zip_DirtArhive_command } Add-Content $JobLog_file -Value "$(Get-Date -Format "dd-MM-yyy HH:mm:ss") - Попытка снятия блокировки базы" #снять блокировку с базы Unlock_IB -_1C_UnlockIB_command $_1C_UnlockIB_command Add-Content $JobLog_file -Value "$(Get-Date -Format "dd-MM-yyy HH:mm:ss") - Завершение работы скрипта" } #endregion <# ОСНОВНОЕ ТЕЛО СКРИПТА #> #region #каталог архивов 1С $_1CArchive_dir = "C:\1C_Bases\Archiv" # файл тонкого клиента текущей версии 1С $_1C_ThinClient_file = Join-Path -Path ${env:ProgramFiles} -ChildPath "1cv8" | Join-Path -ChildPath "8.3.15.1830" | Join-Path -ChildPath "bin" | Join-Path -ChildPath "1cv8c.exe" # файл толстого клиента текущей версии 1С $_1C_ThickClient_file = Join-Path -Path ${env:ProgramFiles} -ChildPath "1cv8" | Join-Path -ChildPath "8.3.15.1830" | Join-Path -ChildPath "bin" | Join-Path -ChildPath "1cv8.exe" Write-Host $_1C_ThinClient_file Write-Host $_1C_ThickClient_file # файл архиватора 7zip $_7zip_Current_file = Join-Path -Path $_1CArchive_dir -ChildPath "7z.exe" #словарь баз $Bases = @{} #список баз: каталог архивов базы | каталог базы $Bases.Add("БП", "C:\1C_Bases\БП") $Bases.Add("ЗУП", "C:\1C_Bases\ЗУП") foreach ($key in $Bases.Keys) { MakeBackup -ArchiveBaseDir $key -BaseDir $Bases.Item($key) -Login "Админ" -Password "123" } #endregion ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2021, 12:58 |
|
Скрипт архивирования файловых баз
|
|||
---|---|---|---|
#18+
Время запуска не играет роли? Если днем вручую или автоматом запустить - разница есть? А если запускать скрипт не от какого то пользователя, а от Вашего имени? Базы файловые про mssql молчу. Но кстати вариант - а почему не зайти во время запуска задания и не посмотреть что происходит в 1с? (я про ночь и автомат) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 17:50 |
|
Скрипт архивирования файловых баз
|
|||
---|---|---|---|
#18+
Программист 1с А если запускать скрипт не от какого то пользователя, а от Вашего имени? я лок. админ - от себя и запускаю, что руками, что шедуллером Программист 1с Но кстати вариант - а почему не зайти во время запуска задания и не посмотреть что происходит в 1с? (я про ночь и автомат) не понятно что искать. и что может происходить в 2 часа ночи. никто не работает. просто бывает что юзера бросают открытую 1с - блокировка БСП не может закрыть клиента? хотя в современной БП модальных окон ведь нет... где-то допустим болтается диалог выбора базы - но это как может помешать? может переписать скрипт? сначала kill task по всем 1с (с базами работают только локально на этом ПК), а потом уже блокировка и архивация... чтобы наверняка ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 18:32 |
|
Скрипт архивирования файловых баз
|
|||
---|---|---|---|
#18+
насколько сама блокировка средствами БСП "надежна", ее может что-то сломать, не дать закрыть приложение, если явных активных действий пользователя в момент ее вызова нет. просто запущено несколько клиентов? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 18:34 |
|
Скрипт архивирования файловых баз
|
|||
---|---|---|---|
#18+
А если клиент - просто висит - тоесть он Вышел из программы - но некое фоновое задание осталось и висит под ним. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 12:55 |
|
Скрипт архивирования файловых баз
|
|||
---|---|---|---|
#18+
Программист 1с А если клиент - просто висит - тоесть он Вышел из программы - но некое фоновое задание осталось и висит под ним. ну такое не пофиксишь... попробую просто сносить все клиенты на ПК. Не красиво конечно, но я не вижу особой разницы с "грязными" архивами ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 13:21 |
|
|
start [/forum/topic.php?fid=28&fpage=3&tid=1518169]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 249ms |
total: | 366ms |
0 / 0 |