|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Доработка и проверка скрипта архивирования |
|
CMD/BAT - [решено] Доработка и проверка скрипта архивирования
|
Пользователь Сообщения: 95 |
Профиль | Отправить PM | Цитировать
Добрый день уважаемые форумчане. Прошу Вашей помощи в проверке и доработке файла .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
|
Профиль | Отправить PM | Цитировать megaloman, Хорошо я попробую сформулировать по конкретней как и что у меня устроено и что нужно, но чуть по позже ) Сейчас пока в кратце могу сказать что недавно словили шифровальщик и хапнули много горя( Вот теперь и хочу сделать достойную а главное автоматизированную систему архивации)
|
Отправлено: 16:22, 07-02-2018 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 95
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2710
|
Профиль | Отправить PM | Цитировать igor.kinma, Имхо, Вы получили что хотели. Единственное, я поленился удалять Backup(SQL)_update.rar на 2 сервере, так как в понедельник он всё равно перезапишется. А если хотите автоматизации, чтобы потом не думать, надо ограничивать число архивов на втором сервере - иначе забьёте весь диск.
|
------- Отправлено: 18:04, 07-02-2018 | #13 |
Пользователь Сообщения: 95
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2710
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 09:46, 08-02-2018 | #15 |
Пользователь Сообщения: 95
|
Профиль | Отправить PM | Цитировать megaloman, Спасибо сейчас поправлю у себя и проверю. Правда сейчас люди работают в 1С и часть файлов не заархивируется, но для теста думаю сойдет.
Поправил, запустил, ждем... |
Отправлено: 09:57, 08-02-2018 | #16 |
Ветеран Сообщения: 2710
|
Профиль | Отправить 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
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2710
|
Профиль | Отправить PM | Цитировать Цитата igor.kinma:
|
|
------- Отправлено: 11:05, 08-02-2018 | #19 |
Пользователь Сообщения: 95
|
Профиль | Отправить 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Доработка скрипта на 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 |
|