CMD/BAT - [решено] Доработка и проверка скрипта архивирования
-
megaloman
Re: CMD/BAT - [решено] Доработка и проверка скрипта архивирования
megaloman, Хорошо я попробую сформулировать по конкретней как и что у меня устроено и что нужно, но чуть по позже ) Сейчас пока в кратце могу сказать что недавно словили шифровальщик и хапнули много горя( Вот теперь и хочу сделать достойную а главное автоматизированную систему архивации)
-
igor.kinma
Re: CMD/BAT - [решено] Доработка и проверка скрипта архивирования
megaloman, Огромное Вам человеческое спасибо!Запустил Ваш скрипт в планировщик с пн по пт в 21:30. Будем тестировать.
Но есть один вопрос. Копирование на \Server-domain\ идет всех файлов из папок Z:\ARHIV\ARHIV_BD и Z:\ARHIV\ARHIV_1C или только последних которые создались?
Но есть один вопрос. Копирование на \Server-domain\ идет всех файлов из папок Z:\ARHIV\ARHIV_BD и Z:\ARHIV\ARHIV_1C или только последних которые создались?
-
igor.kinma
Re: CMD/BAT - [решено] Доработка и проверка скрипта архивирования
igor.kinma, 1C архивируется, а затем и копируется всё заново. Если не устраивает, то надо наманер как для баз SQL именовать архив без привязки к дате, обновлять его (при этом будут переархивированы обновлённые файлы и добавлены новые, а затем уже копировать этот файл с признаком даты в имени. Естественно, при этом в архиве будут все файлы. Вы не объяснили, что архивируется и можно ли после архивирования исходные файлы удалить. Если это бэкапы - вполне можно. И даже нужно, иначе будем постоянно архивировать всё, включая бэкапы столетней давности. Всего-то в Rar добавить ключ. Тогда получим архивы только свежих файлов. А вот если это рабочие базы .... Увы.
С sql мне понятнее. Там бэкапы, да и то, после успешного архивирования я бы их удалял (соответствующий ключ в rar).
В Вашей первоначальной постановке архивируется всё. Иного Вы не озвучивали.
Если что-то не устраивает, постарайтесь четче сформулировать Ваши хотелки
Может быть можно как-то привязываться к именам исходных файлов?
С sql мне понятнее. Там бэкапы, да и то, после успешного архивирования я бы их удалял (соответствующий ключ в rar).
В Вашей первоначальной постановке архивируется всё. Иного Вы не озвучивали.
Если что-то не устраивает, постарайтесь четче сформулировать Ваши хотелки
Может быть можно как-то привязываться к именам исходных файлов?-
igor.kinma
Re: CMD/BAT - [решено] Доработка и проверка скрипта архивирования
megaloman, Сейчас постараюсь объяснить что и как устроено и что бы хотелось получить в результате.
Дано:
1-сервер на нем есть рабочая база 1С Путь D:\Programs\1C к этой папке дан общий доступ и SQL сервер с базами. с пн по пт в 21:00 делается бекап Баз (.bak) с удалением файлов старше 6 дней. Бекапы сохраняются в D:\MSSQL\MSSQL\Backup\21_00.
Так же на этом же сервере есть папки D:\ARHIV\1C и D:\ARHIV\BD (где должны лежать rar архивы)
2-сервер является резервным на нем должны храниться копии архивов. На нем так же есть папки D:\ARHIV\1C и D:\ARHIV\BD. Сетевой путь \\Server-domain\d$\ARHIV....
Что хочется:
Что бы с пн по пт в 21:30 создавался архив (.rar) D:\Programs\1C и D:\MSSQL\MSSQL\Backup\21_00 на сервере 1 и копировался на сервер 2.
- Архив 1С будет каждый раз новый что бы иметь возможность восстановить на любую дату
- Архив SQL должен обновляться с пн по чт, а в пятницу полный архив. или обновляться с пн по пт и переименовываться.
Когда наступает вечер пятницы 21:00 в папке D:\MSSQL\MSSQL\Backup\21_00 будут лежать копии баз за неделю. Следовательно её нужно заархивировать, присвоить дату и скопировать на 2 сервер, а промежуточный архив в папке D:\ARHIV\BD с пн по чт удалить на обои серверах, так как он уже не нужен. В итоге что мы должны получить утром в понедельник придя на работу
5 архивов 1С (.rar) каждый который с датой создания и которые размещены на сервер 1 и 2.
1 архив SQL баз (.rar) с пятничной датой который содержит в себе бекапы баз из папки D:\MSSQL\MSSQL\Backup\21_00 с пн по пт. и так же расположен на сервере 1 и 2.
Все начинается новая неделя и архивы на сервере 1 нам плодить не нужно так как они все есть на 2 сервере, но мы их не удаляем а перезаписываем по 1. (тоесть в 21:30 создается архив а старый за понедельник удаляется) и новый архив так же копируется на сервер 2 (но только новый т.к. копировать все нам не нужно они уже есть на сервере. Что же касается архива c Базами SQL так же создается новый но не удаляя пятничный. Пятничный архив должен удалиться уже на след. понедельник.
Вывод, цель и чего хотелось достичь: каждый понедельник у нас на сервере 1 всегда должен быть полноценный архив SQL и 1С за прошедшую неделю, а сервер 2 является просто сборщиком архивов, на случай падения сервера 1.
Что касаемо удаления:
D:\Programs\1C - рабочая база удалять нельзя.
D:\MSSQL\MSSQL\Backup\21_00 - бекабы сделанные SQL сервером. Удалять можно, но не желательно так как если придется восстанавливать базу скажем так на вчера ни чего из архива доставать не нужно. К тому же файлы старше 6 дней затираются сами.
Вот это как бы основная задача. Если что то я замудрил или как то можно упростить не во вред безопасности пишите.
Дано:
1-сервер на нем есть рабочая база 1С Путь D:\Programs\1C к этой папке дан общий доступ и SQL сервер с базами. с пн по пт в 21:00 делается бекап Баз (.bak) с удалением файлов старше 6 дней. Бекапы сохраняются в D:\MSSQL\MSSQL\Backup\21_00.
Так же на этом же сервере есть папки D:\ARHIV\1C и D:\ARHIV\BD (где должны лежать rar архивы)
2-сервер является резервным на нем должны храниться копии архивов. На нем так же есть папки D:\ARHIV\1C и D:\ARHIV\BD. Сетевой путь \\Server-domain\d$\ARHIV....
Что хочется:
Что бы с пн по пт в 21:30 создавался архив (.rar) D:\Programs\1C и D:\MSSQL\MSSQL\Backup\21_00 на сервере 1 и копировался на сервер 2.
- Архив 1С будет каждый раз новый что бы иметь возможность восстановить на любую дату
- Архив SQL должен обновляться с пн по чт, а в пятницу полный архив. или обновляться с пн по пт и переименовываться.
Когда наступает вечер пятницы 21:00 в папке D:\MSSQL\MSSQL\Backup\21_00 будут лежать копии баз за неделю. Следовательно её нужно заархивировать, присвоить дату и скопировать на 2 сервер, а промежуточный архив в папке D:\ARHIV\BD с пн по чт удалить на обои серверах, так как он уже не нужен. В итоге что мы должны получить утром в понедельник придя на работу
5 архивов 1С (.rar) каждый который с датой создания и которые размещены на сервер 1 и 2.
1 архив SQL баз (.rar) с пятничной датой который содержит в себе бекапы баз из папки D:\MSSQL\MSSQL\Backup\21_00 с пн по пт. и так же расположен на сервере 1 и 2.
Все начинается новая неделя и архивы на сервере 1 нам плодить не нужно так как они все есть на 2 сервере, но мы их не удаляем а перезаписываем по 1. (тоесть в 21:30 создается архив а старый за понедельник удаляется) и новый архив так же копируется на сервер 2 (но только новый т.к. копировать все нам не нужно они уже есть на сервере. Что же касается архива c Базами SQL так же создается новый но не удаляя пятничный. Пятничный архив должен удалиться уже на след. понедельник.
Вывод, цель и чего хотелось достичь: каждый понедельник у нас на сервере 1 всегда должен быть полноценный архив SQL и 1С за прошедшую неделю, а сервер 2 является просто сборщиком архивов, на случай падения сервера 1.
Что касаемо удаления:
D:\Programs\1C - рабочая база удалять нельзя.
D:\MSSQL\MSSQL\Backup\21_00 - бекабы сделанные SQL сервером. Удалять можно, но не желательно так как если придется восстанавливать базу скажем так на вчера ни чего из архива доставать не нужно. К тому же файлы старше 6 дней затираются сами.
Вот это как бы основная задача. Если что то я замудрил или как то можно упростить не во вред безопасности пишите.
-
megaloman
Re: CMD/BAT - [решено] Доработка и проверка скрипта архивирования
igor.kinma, Имхо, Вы получили что хотели. Единственное, я поленился удалять Backup(SQL)_update.rar на 2 сервере, так как в понедельник он всё равно перезапишется. А если хотите автоматизации, чтобы потом не думать, надо ограничивать число архивов на втором сервере - иначе забьёте весь диск.
-
igor.kinma
Re: CMD/BAT - [решено] Доработка и проверка скрипта архивирования
megaloman, я понимаю что это нагло с моей стороны но именно об этом я и хотел Вас попросить. а Именно сделать второй файл который я бы запустил в планировщик на сервере 2.
Дано:
Хочу на сервере 2 сделать папки: Неделя Месяц Год.
Задача:
Сделать Файл который будет отслеживать кол-во архивов и копировать нужные архивы в папки.
Тоесть архивы с сервера 1 должны копироваться на сервер 2 в папку неделя. В ней должны храниться все архивы за весь месяц. Затем в папку месяц должны копироваться архивы на 1, 15 и на конец месяца. А В папке неделя архивы должны перезаписываться.
Попробую пояснить в январе 31 день. Хотелось бы что бы в папке неделя хранился 31 архив а в папку месяц копировался архив на 01.01.2018, 15.01.2018 и 31.01.2018. Затем в Папке неделя архивы начали бы перезаписываться. на Февральские.
Тоесть на конец месяца в папке неделя должны быть февральские архивы а в папке месяц архивы на 01.02.2018, 15.02.2018, 28.02.2018
ну и т.д.
Скажите пожалуйста реально ли написать такой Файл?
megaloman, Запустил Ваш скрипт в Планировщик. (Немного подумав, на ум приходит доработка 1 командного файла) он отработал как положено в 21:30. Что получил:
Архив баз 1С создался и скопировался. а Архив SQL баз не создался и не скопировался ! Лог файл то же создался только на базы 1С, на SQL да же нет лог файла
На всякий случай скидываю поправленный файл. Может я что накосячил
мой скрипт
[spoiler]Код: [/spoiler]
Дано:
Хочу на сервере 2 сделать папки: Неделя Месяц Год.
Задача:
Сделать Файл который будет отслеживать кол-во архивов и копировать нужные архивы в папки.
Тоесть архивы с сервера 1 должны копироваться на сервер 2 в папку неделя. В ней должны храниться все архивы за весь месяц. Затем в папку месяц должны копироваться архивы на 1, 15 и на конец месяца. А В папке неделя архивы должны перезаписываться.
Попробую пояснить в январе 31 день. Хотелось бы что бы в папке неделя хранился 31 архив а в папку месяц копировался архив на 01.01.2018, 15.01.2018 и 31.01.2018. Затем в Папке неделя архивы начали бы перезаписываться. на Февральские.
Тоесть на конец месяца в папке неделя должны быть февральские архивы а в папке месяц архивы на 01.02.2018, 15.02.2018, 28.02.2018
ну и т.д.
Скажите пожалуйста реально ли написать такой Файл?
megaloman, Запустил Ваш скрипт в Планировщик. (Немного подумав, на ум приходит доработка 1 командного файла) он отработал как положено в 21:30. Что получил:
Архив баз 1С создался и скопировался. а Архив SQL баз не создался и не скопировался ! Лог файл то же создался только на базы 1С, на SQL да же нет лог файла
На всякий случай скидываю поправленный файл. Может я что накосячил
мой скрипт
[spoiler]Код: [/spoiler]
Код: Выделить всё
Set "Arc="%ProgramFiles%\WinRar\Rar.exe""
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
Set "DArc=%TDate:~0,4%.%TDate:~4,2%.%TDate:~6,2%
Call :DayOfWeek "DOW"
Call :Backup "D:\Programs\1C" "D:\ARHIV\1C" "Backup(1C)_%DArc%.rar" "\\Server-domain\d$\ARHIV\1C" "D:\ARHIV\log\1C_%DArc%.log"
If "%DOW%"=="5" (
>>"D:\ARHIV\log\SQL_%DArc%.log" (
Echo ++++++
Echo ++++++ %Date% %Time% "D:\MSSQL\MSSQL\Backup\21_00"
Echo ++++++ Ren "D:\ARHIV\BDSQL\Backup(SQL)_update.rar" "Backup(SQL)_%DArc%.rar"
Ren "D:\ARHIV\BDSQL\Backup(SQL)_update.rar" "Backup(SQL)_%DArc%.rar" 2>&1
)
Call :Backup "D:\MSSQL\MSSQL\Backup\21_00" "D:\ARHIV\BDSQL" "Backup(SQL)_%DArc%.rar" "\\Server-domain\d$\ARHIV\SQL" "D:\ARHIV\log\SQL_%DArc%.log"
) Else (
Call :Backup "D:\MSSQL\MSSQL\Backup\21_00" "D:\ARHIV\BDSQL" "Backup(SQL)_update.rar" "\\Server-domain\d$\ARHIV\SQL" "D:\ARHIV\log\SQL_%DArc%.log"
rem 1 2 3 4 5
GoTo :Eof
:Backup
>>%5 (
Echo ++++++
Echo ++++++ %Date% %Time% %1
>nul %Arc% u -m3 -r -ep1 "%~2\%~3" "%~1\*.*"
If Not Exist "%~2\%~3" (
Echo !!!!!! Archive not created "%~2\%~3"
) Else (
Echo ++++++ Files In Archives "%~2\%~3"
Echo:
%Arc% lb "%~2\%~3"
Echo:
Echo ++++++ Copy arhives from %2 to %4
Echo:
Xcopy /D /Y /F "%~2\*.rar" "%~4\"
Echo:
Echo ++++++ Delete arhives from %2
Echo:
FOR /F "usebackq skip=7 delims=*" %%f IN (`2^>nul Dir "%~2\*%~x3" /B /A:-D /O:-D /T:C`) DO Del /S "%~2\%%f"
FOR /F "usebackq skip=7 delims=*" %%f IN (`2^>nul Dir "%~dp5*%~x5" /B /A:-D /O:-D /T:C`) DO Del /S "%~dp5%%f"
)
)
GoTo :Eof
:DayOfWeek
rem Выдаёт номер дня недели в переменную имя которой указано в вызове в кавычках
Set /A YYYY=%date:~6,4%, MM=1%date:~3,2%-100, DD=1%date:~0,2%-100
Set /A %~1=((%YYYY%-1901)*365 + (%YYYY%-1901)/4 + %DD% + (!(%YYYY% %% 4))*(!((%MM%-3)^&16))+(%MM%-1)*30+2*(!((%MM%-7)^&16))-1+((65611044^>^>(2*%MM%))^&3))%%7+1
GoTo :Eof-
megaloman
Re: CMD/BAT - [решено] Доработка и проверка скрипта архивирования
igor.kinma, Не знаю объём Ваших баз, но, по крайней мере, для отладки указал бы в RAR ключ -m1. Время радикально уменьшится.
А чтобы не дёргать 1C закомментировал бы строку
rem Call :Backup "D:\Programs\1C" ....
Наверное, если есть вероятность использования файлов во время архивирования, лучше добавить в RAR ключ -dh. Всегда есть вероятность, что какая-то тётушка забыла выйти из программы вечером. Какую при этом копию Вы получите, не знаю, не уверен, что сможете восстановить базу после этого.
>nul %Arc% u -m3 -r -ep1 -dh "%~2\%~3" "%~1\*.*"
Цитата из хелпа RAR
[spoiler]Ключ -DH — открывать совместно используемые файлы.
--------------------------------------------------------------------------------
Позволяет обрабатывать файлы, открытые для записи другими программами.
Это опасный ключ, так как он разрешает архивировать те файлы, которые в тот же момент могут быть изменены другой программой. Если при этом будет нарушена внутренняя структура заархивированного файла, то программа для его обработки после распаковки такого файла может его не открыть. Используйте этот ключ очень осторожно![/spoiler]
Цитата igor.kinma:
Сделать Файл который будет отслеживать кол-во архивов и копировать нужные архивы в папки.
Копировать или перемещать?
А чтобы не дёргать 1C закомментировал бы строку
rem Call :Backup "D:\Programs\1C" ....
Наверное, если есть вероятность использования файлов во время архивирования, лучше добавить в RAR ключ -dh. Всегда есть вероятность, что какая-то тётушка забыла выйти из программы вечером. Какую при этом копию Вы получите, не знаю, не уверен, что сможете восстановить базу после этого.
>nul %Arc% u -m3 -r -ep1 -dh "%~2\%~3" "%~1\*.*"
Цитата из хелпа RAR
[spoiler]Ключ -DH — открывать совместно используемые файлы.
--------------------------------------------------------------------------------
Позволяет обрабатывать файлы, открытые для записи другими программами.
Это опасный ключ, так как он разрешает архивировать те файлы, которые в тот же момент могут быть изменены другой программой. Если при этом будет нарушена внутренняя структура заархивированного файла, то программа для его обработки после распаковки такого файла может его не открыть. Используйте этот ключ очень осторожно![/spoiler]
Цитата igor.kinma:
Сделать Файл который будет отслеживать кол-во архивов и копировать нужные архивы в папки.
CMD/BAT - [решено] Доработка и проверка скрипта архивирования
Копировать или перемещать?
-
igor.kinma
Re: CMD/BAT - [решено] Доработка и проверка скрипта архивирования
megaloman, Да объем баз действительно большой по этому пока и не отписываюсь о результатах, но уже заметил то ли проблему, то ли долгую работу.
1) Архив 1С создался и скопировался
2) Архив SQL баз создался но объем файла 0. Ждал 30 минут. Сейчас отменил задачу и удалил из папки D:\MSSQL\MSSQL\Backup\21_00 все файлы оставил только 1 для теста.
Вот скрин окна на каком месте все висит:
строка @Echo Off убрана для теста
P.S. Судя по всему имеет место быть зависание. прошло 10 минут а все так же и осталось вот скрин вместе с лог файлом
1) Архив 1С создался и скопировался
2) Архив SQL баз создался но объем файла 0. Ждал 30 минут. Сейчас отменил задачу и удалил из папки D:\MSSQL\MSSQL\Backup\21_00 все файлы оставил только 1 для теста.
Вот скрин окна на каком месте все висит:
Файл 151136
строка @Echo Off убрана для теста
P.S. Судя по всему имеет место быть зависание. прошло 10 минут а все так же и осталось вот скрин вместе с лог файлом
Файл 151138
-
igor.kinma
Re: CMD/BAT - [решено] Доработка и проверка скрипта архивирования
Цитата igor.kinma:
Архив SQL баз создался но объем файла 0
ИМХО, не создался, а создаётся. Упаковщик не отработал еще. Какой объём бэкапов? Покажите лог, созданный скриптом. На скрине ничего не видно, так как нормальный вывод RAR направлен в nul.
Архив SQL баз создался но объем файла 0
CMD/BAT - [решено] Доработка и проверка скрипта архивирования
ИМХО, не создался, а создаётся. Упаковщик не отработал еще. Какой объём бэкапов? Покажите лог, созданный скриптом. На скрине ничего не видно, так как нормальный вывод RAR направлен в nul.
-
igor.kinma
Re: CMD/BAT - [решено] Доработка и проверка скрипта архивирования
megaloman, Ура спустя 20 минут архив создался и скопировался. Но есть небольшой баг в лог файлах, а именно ломаный текст вот скидываю сами файлы.
1)
2)
Можно ли как то уменьшить лог и исправить текст?
P.S. полный объем архивируемых баз SQL - 40 Гб а 1С - 5 Гб
1)
Файл 151139
2)
Файл 151140
Можно ли как то уменьшить лог и исправить текст?
P.S. полный объем архивируемых баз SQL - 40 Гб а 1С - 5 Гб