Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Доработка и проверка скрипта архивирования

Ответить
Настройки темы
CMD/BAT - [решено] Доработка и проверка скрипта архивирования

Пользователь


Сообщения: 95
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: igor.kinma
Дата: 24-01-2018
Описание: Последняя строчка P.S.
Добрый день уважаемые форумчане. Прошу Вашей помощи в проверке и доработке файла .bat так как сам я не очень силен в этой области, но что то нашел в интернете что то подправил сам. И так задача:

Есть 2 сервера:

1 хранятся Бд SQL и 1C. Путь D:\Programs\1C и резервные копии БД SQL D:\MSSQL\MSSQL\Backup\21_00. Есть промежуточные папка D:\ARHIV\ARHIV_1C и D:\ARHIV\ARHIV_BD
2 сервер на котором должны храниться копии сервера 1. Путь \\Server-domain\d$\ARHIV\ARHIV_BD и \\Server-domain\d$\ARHIV\ARHIV_1C .

Нужно сделать так что бы каждый день на сервере 1 делались архивы 1С и BD и копировались на сервер 2. При этом архивы на сервере 1 должны храниться не более 7 дней. Сделал такой исполняемый файл и сохранил его как start.bat:

код
D:

cd D:\Programs\1C

rar a -agYYYY.MM.DD -m5 -r -x D:\ARHIV\ARHIV_1C\backup_.rar *.*

cd D:\MSSQL\MSSQL\Backup\21_00

rar a -agYYYY.MM.DD -m5 -r -x D:\ARHIV\ARHIV_BD\backup_.rar *.*

copy /Y D:\ARHIV\ARHIV_1C\*.rar \\Server-domain\d$\ARHIV\ARHIV_1C\*.rar

copy /Y D:\ARHIV\ARHIV_BD\*.rar \\Server-domain\d$\ARHIV\ARHIV_BD\*.rar

Forfiles /P D:\ARHIV\ARHIV_1C /S /M *.* /D -7 /C "cmd /c del /Q @path"

Forfiles /P D:\ARHIV\ARHIV_BD /S /M *.* /D -7 /C "cmd /c del /Q @path"


Скажите все ли тут так? можно ли что то облегчить? И как к моей задаче сделать Log файл. Заранее всем спасибо за советы и участие в теме!

P.S. Знаю что команды forfiles и copy можно заменить командой robocopy, но как понять не могу. Хотя возможно я ошибаюсь что их можно заменить...

Отправлено: 13:16, 24-01-2018

 

Пользователь


Сообщения: 95
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, Хорошо я попробую сформулировать по конкретней как и что у меня устроено и что нужно, но чуть по позже ) Сейчас пока в кратце могу сказать что недавно словили шифровальщик и хапнули много горя( Вот теперь и хочу сделать достойную а главное автоматизированную систему архивации)

Отправлено: 16:22, 07-02-2018 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 95
Благодарности: 0

Профиль | Отправить PM | Цитировать


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 дней затираются сами.

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

Последний раз редактировалось igor.kinma, 07-02-2018 в 17:56.


Отправлено: 17:18, 07-02-2018 | #12


Ветеран


Contributor


Сообщения: 2710
Благодарности: 1686

Профиль | Отправить PM | Цитировать


igor.kinma, Имхо, Вы получили что хотели. Единственное, я поленился удалять Backup(SQL)_update.rar на 2 сервере, так как в понедельник он всё равно перезапишется. А если хотите автоматизации, чтобы потом не думать, надо ограничивать число архивов на втором сервере - иначе забьёте весь диск.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 18:04, 07-02-2018 | #13


Пользователь


Сообщения: 95
Благодарности: 0

Профиль | Отправить PM | Цитировать


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 да же нет лог файла

На всякий случай скидываю поправленный файл. Может я что накосячил

мой скрипт
Код: Выделить весь код
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

Последний раз редактировалось igor.kinma, 07-02-2018 в 23:51.


Отправлено: 23:40, 07-02-2018 | #14


Ветеран


Contributor


Сообщения: 2710
Благодарности: 1686

Профиль | Отправить PM | Цитировать


igor.kinma,
Накосячили. Потеряли скобку. Хорошо хоть, что свой код предоставили.
Код: Выделить весь код
)
rem                          1                            2                   3                           4                                   5
GoTo :Eof
Давайте решать проблемы по мере их поступления. Я бы предложил запустить скрипт немедленно и убедиться в его нормальной работе, а уж потом ждать его отработки в планировщике.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 09:46, 08-02-2018 | #15


Пользователь


Сообщения: 95
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, Спасибо сейчас поправлю у себя и проверю. Правда сейчас люди работают в 1С и часть файлов не заархивируется, но для теста думаю сойдет.

Поправил, запустил, ждем...

Отправлено: 09:57, 08-02-2018 | #16


Ветеран


Contributor


Сообщения: 2710
Благодарности: 1686

Профиль | Отправить PM | Цитировать


igor.kinma, Не знаю объём Ваших баз, но, по крайней мере, для отладки указал бы в RAR ключ -m1. Время радикально уменьшится.
А чтобы не дёргать 1C закомментировал бы строку
rem Call :Backup "D:\Programs\1C" ....
Наверное, если есть вероятность использования файлов во время архивирования, лучше добавить в RAR ключ -dh. Всегда есть вероятность, что какая-то тётушка забыла выйти из программы вечером. Какую при этом копию Вы получите, не знаю, не уверен, что сможете восстановить базу после этого.
>nul %Arc% u -m3 -r -ep1 -dh "%~2\%~3" "%~1\*.*"
Цитата из хелпа RAR
Ключ -DH — открывать совместно используемые файлы.
--------------------------------------------------------------------------------
Позволяет обрабатывать файлы, открытые для записи другими программами.
Это опасный ключ, так как он разрешает архивировать те файлы, которые в тот же момент могут быть изменены другой программой. Если при этом будет нарушена внутренняя структура заархивированного файла, то программа для его обработки после распаковки такого файла может его не открыть. Используйте этот ключ очень осторожно!
Цитата igor.kinma:
Сделать Файл который будет отслеживать кол-во архивов и копировать нужные архивы в папки. »
Копировать или перемещать?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 08-02-2018 в 10:55.


Отправлено: 10:26, 08-02-2018 | #17


Пользователь


Сообщения: 95
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, Да объем баз действительно большой по этому пока и не отписываюсь о результатах, но уже заметил то ли проблему, то ли долгую работу.

1) Архив 1С создался и скопировался
2) Архив SQL баз создался но объем файла 0. Ждал 30 минут. Сейчас отменил задачу и удалил из папки D:\MSSQL\MSSQL\Backup\21_00 все файлы оставил только 1 для теста.

Вот скрин окна на каком месте все висит:Файл 151136

строка @Echo Off убрана для теста

P.S. Судя по всему имеет место быть зависание. прошло 10 минут а все так же и осталось вот скрин вместе с лог файлом Файл 151138

Последний раз редактировалось igor.kinma, 23-09-2018 в 12:26.


Отправлено: 10:50, 08-02-2018 | #18


Ветеран


Contributor


Сообщения: 2710
Благодарности: 1686

Профиль | Отправить PM | Цитировать


Цитата igor.kinma:
Архив SQL баз создался но объем файла 0 »
ИМХО, не создался, а создаётся. Упаковщик не отработал еще. Какой объём бэкапов? Покажите лог, созданный скриптом. На скрине ничего не видно, так как нормальный вывод RAR направлен в nul.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 11:05, 08-02-2018 | #19


Пользователь


Сообщения: 95
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, Ура спустя 20 минут архив создался и скопировался. Но есть небольшой баг в лог файлах, а именно ломаный текст вот скидываю сами файлы.
1) Файл 151139
2) Файл 151140

Можно ли как то уменьшить лог и исправить текст?

P.S. полный объем архивируемых баз SQL - 40 Гб а 1С - 5 Гб

Последний раз редактировалось igor.kinma, 23-09-2018 в 12:26.


Отправлено: 11:06, 08-02-2018 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Доработка и проверка скрипта архивирования

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доработка скрипта на Bash parrabol Программирование в *nix 4 31-10-2016 14:45
Java - маленькая доработка скрипта СТАТИСТИКА Kos2an Программирование и базы данных 0 04-10-2013 23:06
VBS/WSH/JS - доработка скрипта ZeVSalt Программирование и базы данных 3 23-09-2011 22:33
Проверка параметров запуска скрипта morgan1991 AutoIt 2 03-03-2009 00:43




 
Переход