Резервное копирование файловой ИБ 1С:Розничная торговля

Публикация № 725423

Администрирование - Архивирование (backup)

резервное копирование PowerShell

1
Предлагаю метод организации резервного копирования ИБ 1С:Розничная торговля. Метод резервного копирования - упаковка в архив. Способ запуска - при включении компьютера. Реализация - PowerShell.

Сразу объясню, почему я отказался от имеющегося в 1С механизма резервного копирования. Изначально всё было настроено средствами 1С и резервное копирование должно было осуществляться после выхода пользователя, т.е. вечером, в конце рабочего дня. Когда мне через какое-то время понадобилось восстановить базу одного из магазинов из резервной копии, я обнаружил, что копий-то нет. Причиной тому был человеческий фактор. Никто из работников не готов был ждать в конце рабочего дня завершения процесса резервного копирования (какое "ждать"? через 3 минуты автобус!). Всё это и подтолкнуло меня к решению, которое я реализовал.

Итак, что делает мой скрипт, запускающийся при загрузке компьютера (утром, пока работницы пьют кофе, делятся новостями, покупателей ещё нет).

Первым делом, происходит блокировка ИБ, дабы до окончания процесса копирования никто не смог запустить 1С и пытаться изменять ещё не до конца скопированную базу.

"{1,$date_stamp,00010101000000,""ACCESS DENIED!!!"","""",""""}" | Out-File -FilePath $base_dir\1Cv8.CDN -Encoding default -Force

(Ранее переменная $date_stamp получает значение ГГГГММДДччммсс, в переменной $base_dir хранится путь к ИБ)

Затем происходит упаковка файла 1Cv8.1CD простым и бесплатным архиватором 7-zip.

$pack_args=@("a", (""""+$bak_dir+"\"+$arc_name+"_"+$date_stamp+".7z"""), "-r", "-ssw", ("""-w"+$env:TEMP+""""), (""""+$base_dir+"\1Cv8.1CD"""))
$process=Start-Process -FilePath $pack_app -ArgumentList $pack_args -NoNewWindow -Wait -PassThru
$exit_code=$process.ExitCode

($bak_dir - путь к каталогу с архивами, $arc_name - префикс архива, $pack_app - путь к исполняемому файлу архиватора, зависит от разрядности ОС)

Логи процесса архивирования (время начала, время завершения, код завершения) складываются на FTP-сервер.

Import-Module PSFTP
$hash=$ftp_user+".pwd"
$password=(Get-Content "$hash" | ConvertTo-SecureString)
$local_path=$log_dir+"\"+$log_name+".log"
$credential=New-Object Management.Automation.PSCredential($ftp_user,$password)
Set-FTPConnection -Server $ftp_server -Session "BlakitFtp" -Credential $credential
$session=Get-FTPConnection -Session BlakitFtp
Add-FTPItem -LocalPath $local_path -Overwrite -Path $ftp_dir -Session $session

(Модуль PSFTP взят отсюда, $ftp_user - имя пользователя FTP-сервера, $hash - файл, содержащий хеш пароля пользователя, $log_dir и $log_name - каталог и имя файла журнала, $ftp_server - адрес FTP-сервера, $ftp_dir - каталог для журналов на сервере)

Удаляются копии, старше одной недели (жёсткий диск не резиновый всё-таки).

$now=Get-Date
$days="7"
$arc_stamp=$arc_name+"_*.7z"
$last_write=$now.AddDays(-$days)
$files=Get-Childitem -LiteralPath $bak_dir -Filter $arc_stamp | where{$_.LastWriteTime -le "$last_write"}
foreach ($file in $files)
{
    if ($file -ne $NULL)
    {
        Remove-Item $file.FullName | Out-Null
    }
}

Снимается блокировка ИБ.

Remove-Item -Path $base_dir\1Cv8.CDN -Force

 

Я постарался снабдить скрипт инсталлятором (install.ps1), который распакует необходимые файлы, установит недостающие компоненты, создаст файл конфигурации, файл с хешем пароля пользователя и ярлык для автоматического запуска. Единственное, что нужно сделать вручную - изменить политику выполнения скриптов PowerShell (подробнее)

Всё, что в архиве - либо написано мной, либо имеется в свободном доступе в сети интернет.

1

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

Наименование Файл Версия Размер
Резервное копирование файловой ИБ 1С:Розничная торговля:
.zip 863,27Kb
10.01.18
1
.zip 863,27Kb 1 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. zarucheisky 11.01.18 12:04 Сейчас в теме
ИМХО, лучше копировать BITS-ом в облако.
Тот же mail.ru даёт 25 GB облака, можно настроить O-диск (есть такая вполне шустрая прога) и будет доступно как диск О.
2. avolkov2017 1 11.01.18 12:16 Сейчас в теме
(1)
Может, оно и лучше. Вероятно, я позже так и буду поступать, но пока я копирую только логи, поскольку сам архив при своём "весе" около 250 Мб через 512-кбитную "трубочку" от Белтелекома будет выгружаться весь рабочий день, а может и дольше.
3. zarucheisky 11.01.18 13:21 Сейчас в теме
(2) потому BITS и лучше - не грузит машину, не грузит канал особо
4. zarucheisky 11.01.18 13:24 Сейчас в теме
5. aspirator23 393 20.01.18 15:36 Сейчас в теме
(4)
Start-BitsTransfer
Интересная штука, для РИБ отлично подходит.
6. DenisCh 20.01.18 15:38 Сейчас в теме
(1) Облака не нужны. Копировать нужно к себе и убирать в сейф.
7. avolkov2017 1 22.01.18 08:37 Сейчас в теме
(6) Слишком велико влияние человеческого фактора, в определённом смысле достаточно надёжно, но неприемлемо.
Оставьте свое сообщение