![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Резервное копирование 1С на удаленный сервер linux |
|
CMD/BAT - Резервное копирование 1С на удаленный сервер linux
|
Новый участник Сообщения: 43 |
Необходимо выполнить резервное копирование нескольких файловых бд 1С из каталога содержащего множество различных бд 1С на удаленный linux сервер доступ к которому реализован посредствлм ssh.
Написал соответствующий скрипт. Хотелось бы услышать конструктивную критику. Можно ли данный скрипт улучшить? Также есть вопрос как сравнить md5 сумму созданного архива локально и того который залился на удаленный хост. Целесообразно ли это вообще? @Echo OFF SetLocal EnableExtensions EnableDelayedExpansion cls goto :q1 ########################################### # # # Скрипт резервного копирования 1С # # # ########################################### Выполняет следующие действия: 1. Проверка существования каталогов и бд 1С заданных в параметрах. 2. Копирование бд 1С на другой раздел. Запись в лог результата. 3. Архивация каталогов 1С и во временный каталог. Запись в лог результата. 4. Тестирование архива. Запись в лог результата. 5. Копирование созданного архива на удаленный хост посредством протокола SСP. Запись в лог результата. 6. Копирование ежедневного архива локально в каталог для хранения. Запись в лог результата. 7. Удаление копии выполненной на 1 шаге. Запись в лог результата. 8. Оставляем в каталоге для хранения 7 новейших файлов, т. е. удаляем старые резервные копии. Запись в лог результата. ? 9. Проверка md5sum архива на локальном и удаленном хосте. -------------------------------------------------------------------------------- === Для запуска скрипта выполнить компанду === bak.cmd параметр1. параметр2. ... параметрN гле параметр1 - каталог, где находятся рабочие бд 1С параметр2 - каталог в который копируются бд 1С параметр3 - каталог, куда производится архивация параметр4 - каталог, в котором хранятся упакованные резервные копии параметр5 - путь к архиватору 7-zip параметр6 - лог параметр7 - путь к PSCP параметр8 - путь к приватному ключу параметр9 - параметры удаленного хоста на который производится копирование архива (юзер, сервер, куда копировать) параметр10 - имя БД 1С для бекапа параметр11 - имя БД 1С для бекапа ... параметрN - имя БД 1С для бекапа Например: bak.cmd e:\database d:\ f:\backup\temp\database f:\Backup\database "%programfiles%\7-Zip\7z" f:\Backup\database\arch.log 7 "C:\temp\bak_script\putty\pscp.exe" "C:\temp\bak_script\putty\private_key.ppk" bak@192.168.37.2:/var/ftp/pub/backup/test 1SBUKR 1SKASSA LTL Optimus :q1 rem -=====[ Решение проблем с датой ]=======- :: Code by Herbert Kleebauer echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>d_t.com echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>d_t.com echo LisqMz`wGH@wKuur`G@w?ogBgGG}G?j_egoNOG?w?`gBLksqgG`w?WgBgG>>d_t.com echo G}G?R_MgoNMy?wSx@W?s?W?@zAB`LrFuBLyt~vuco{@LuKooD?BFHqrIcP>>d_t.com echo _sdDxb1T??=?rILO_sdDqx1T??=?rILO_sdDnl1T??=?rILO_sdD`c1T??>>d_t.com echo =?rILO_sdDgg1T??=?rILO_sdDll1T??=?rILO_sdDrr1T??=??IL?0xxx>>d_t.com FOR /F "delims=" %%i IN ('d_t.com') DO %%i del d_t.com goto :q2 echo century: %_cy% echo year: %_yr% echo month: %_mo% echo day: %_da% echo hour: %_hh% echo minute: %_mm% echo second: %_ss% echo all: %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% echo. echo %DATE% %TIME% =========================================================== :q2 rem Проверка существования первого параметра set Errors=0 if [%1]==[] ( set Errors=1 echo. echo. echo ################################# echo # # echo # NE UKAZANI PARAMETRI # echo # # echo ################################# echo. echo. ) if %Errors% EQU 1 goto :EOF rem Проверка существования 10 параметра set Errors=0 if [%10]==[] ( set Errors=1 echo. echo. echo ######################################### echo # # echo # NE UKAZAN ODIN IZ PARAMETROV # echo # # echo ######################################### echo. echo. ) if %Errors% EQU 1 goto :EOF goto :q3 -========[ Объявление переменных ]===========- db_dir - каталог, где находятся рабочие бд 1С temp_dir - каталог для копирования 1С arch_temp_dir - каталог, куда производится архивация arch_dir - каталог, в котором хранятся упакованные резервные копии path_7z - путь к архиватору 7-zip log - имя файла, в который записываются сообщения об ошибках path_pscp - путь к pscp.exe path_key - путь к приватному ключу backup_server - пользователь, сервер и место на сервере куда производится копирование %10, %11,...%N - каталоги, в которых находятся БД 1С n_files - количество файлов которое оставляем в локальном хранилище архивов :q3 set db_dir=%1 set temp_dir=%2 set arch_temp_dir=%3 set arch_dir=%4 set path_7z=%5 set log=%6 set path_pscp=%7 set path_key=%8 set backup_server=%9 set n_files=7 echo. >> %log% echo. >> %log% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% ############### Start script ############### >> %log% rem При желании логирования указанных параметров убрать метку с этого блока rem goto :q4 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% p1 = %1 >> %log% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% p2 = %2 >> %log% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% p3 = %3 >> %log% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% p4 = %4 >> %log% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% p5 = %5 >> %log% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% p6 = %6 >> %log% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% p7 = %7 >> %log% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% p8 = %8 >> %log% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% p9 = %9 >> %log% Set K=0 For %%I In (%*) Do ( If !K!==9 ( echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Имя БД 1С для копирования = %%I >> %log% ) Else ( Set /A K += 1 ) ) rem :q4 rem Проверка указанной через параметры имени хотя бы одной бд 1С set Errors=0 if [%11]==[] ( set Errors=1 echo. echo. echo ######################################### echo # # echo # NE UKAZANA NI ODNA BAZA 1C # echo # # echo ######################################### echo. echo. echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% ОШИБКА - Не указана ни одна база 1С >> %log% ) if %Errors% EQU 1 goto end rem -=================================================- rem -===[ Проверка доступности каталогов, указанных при объявлении переменных ]===- set Errors=0 if not exist %db_dir% ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог db_dir=%db_dir% не существует или недоступен >> %log% ) if not exist %temp_dir% ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог temp_dir=%temp_dir% не существует или недоступен >> %log% ) if not exist %arch_temp_dir% ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог arch_temp_dir=%arch_temp_dir% не существует или недоступен >> %log% ) if not exist %arch_dir% ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог arch_dir=%arch_dir% не существует или недоступен >> %log% ) if not exist %path_7z% ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог path_7z=%path_7z% не существует или недоступен >> %log% ) if not exist %path_pscp% ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог path_pscp=%path_pscp% не существует или недоступен >> %log% ) if not exist %path_key% ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог path_key=%path_key% не существует или недоступен >> %log% ) if %Errors% EQU 1 goto end rem -===[ Проверка доступности каталогов 1С, указанных через параметры ]===- set Errors=0 Set K=0 For %%I In (%*) Do ( If !K!==9 ( if not exist %db_dir%\%%I ( set Errors=1 echo. echo. echo ######################################################################### echo # # echo # Dir %db_dir%\%%I is unavailable or does not exist # echo # # echo ######################################################################### echo. echo. echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог %db_dir%\%%I НЕ существует или недоступен>> %log% ) ) Else ( Set /A K += 1 ) ) if %Errors% EQU 1 goto end rem удаление старого архива из каталога TEMP if exist %arch_temp_dir%\*.7z ( DEL /Q %arch_temp_dir%\*.7z & echo file 7z DELETE exist %arch_temp_dir% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Файл *.7z удален из каталога %arch_temp_dir% >> %log% ) else ( echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Файл *.7z не существует в каталоге %arch_temp_dir% >> %log% ) rem Чистка временного каталога куда будут копироваться бд 1С (в случае, если там по каким либо причинам что то осталось) Set K=0 For %%I In (%*) Do ( If !K!==9 ( if exist %temp_dir%\%%I ( rmdir /s /q %temp_dir%\%%I & echo Dir %%I DELETE exist %temp_dir% echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Удаление каталога %arch_temp_dir%\%%I >> %log% ) ) Else ( Set /A K += 1 ) ) rem Копирование каталогов содержащих базы 1С в место определенное соответствующим параметром Set K=0 For %%I In (%*) Do ( If !K!==9 ( xcopy %db_dir%\%%I %temp_dir%\%%I /e /i /q /h If %ERRORLEVEL% EQU 0 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог %db_dir%\%%I успешно скопирован в %temp_dir%\%%I >> %log% If Errorlevel 1 ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% При копировании каталога %db_dir%\%%I возникла ОШИбКА >> %log% ) ) Else ( Set /A K += 1 ) ) if %Errors% EQU 1 goto end rem архивация каталогов 1С и во временную папку c нормальным сжатием, паролем, шифрованием заголовков set Errors=0 Set K=0 For %%I In (%*) Do ( If !K!==9 ( %path_7z% a %arch_temp_dir%\%_cy%%_yr%-%_mo%-%_da%_%_hh%-%_mm%.7z -ppass -mhe -ssw %temp_dir%\%%I > nul echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог %temp_dir%\%%I добавлен в архив %arch_temp_dir%\%_cy%%_yr%-%_mo%-%_da%_%_hh%-%_mm%.7z >> %log% If %ERRORLEVEL% EQU 0 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Архивация каталога %temp_dir%\%%I выполнена успешно >> %log% If Errorlevel 1 ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% При архивации каталога %temp_dir%\%%I возникла ОШИбКА >> %log% ) ) Else ( Set /A K += 1 ) ) if %Errors% EQU 1 goto end rem Тестирование созданного архива set Errors=0 %path_7z% t %arch_temp_dir%\*.7z -r -ppass > nul If %ERRORLEVEL% EQU 0 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Тестирование созданного архива выполнено успешно >> %log% If Errorlevel 1 ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% При тестировании созданного архива возникла ОШИбКА >> %log% ) if %Errors% EQU 1 goto end rem Копирование архива на удаленный сервер через протокол scp %path_pscp% -i %path_key% %arch_temp_dir%\*.7z %backup_server% If %ERRORLEVEL% EQU 0 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Архив успешно скопирован на удаленный сервер %backup_server% >> %log% If Errorlevel 1 ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% При копировании архива на удаленный сервер %backup_server% возникла ОШИбКА >> %log% ) rem копирование ежедневного архива локально в каталог arch_dir set Errors=0 XCOPY %arch_temp_dir%\*.7z %arch_dir% /y If %ERRORLEVEL% EQU 0 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Архив %arch_temp_dir%\*.7z успешно скопирован в %arch_dir% >> %log% If Errorlevel 1 ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% При копировании архива %arch_temp_dir%\*.7z возникла ОШИбКА >> %log% ) if %Errors% EQU 1 goto end rem -=====[ Оставить в каталоге arch_dir указанное (n_files )количество новейших файлов ]=========- echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Оставить в каталоге %arch_temp_dir% %n_files% новейших файлов>> %log% FOR /F "SKIP=%n_files% TOKENS=*" %%I IN ('DIR /B /O:-D "%arch_dir%"\*.7z') DO ( ERASE "%arch_dir%"\%%I If %ERRORLEVEL% EQU 0 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Файл %arch_dir%\%%I удален успешно >> %log% If Errorlevel 1 ( set Errors=1 echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% При попытке удалить файл %arch_dir%\%%I возникла ОШИбКА >> %log% ) ) if %Errors% EQU 1 goto end rem Чистка временного каталога куда были скопированы бд 1С Set K=0 For %%I In (%*) Do ( If !K!==9 ( if exist %temp_dir%\%%I ( rmdir /s /q %temp_dir%\%%I & echo Dir %%I DELETE exist %temp_dir%\%%I echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Удаление каталога %temp_dir%\%%I >> %log% ) else ( echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% Каталог %temp_dir%\%%I не существует >> %log% ) ) Else ( Set /A K += 1 ) ) echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% ############## End script normal ############ >> %log% exit /b :end echo %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss% ############# End script ERROR ########### >> %log% C:\temp\bak_script\bak.cmd "C:\temp\test\db dir" "C:\temp\test\temp_dir" "C:\temp\test\arch_temp_dir" "C:\temp\test\arch_dir" "%programfiles%\7-Zip\7z.exe" "C:\temp\test\arch.log" "C:\temp\bak_script\putty\pscp.exe" "C:\temp\bak_script\putty\private_key.ppk" bak@192.168.37.2:/var/ftp/pub/backup/test LTL Optimus Пример лога Цитата:
|
||
Отправлено: 17:55, 18-01-2010 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
HDD - Резервное копирование | zdughi | Накопители (SSD, HDD, USB Flash) | 7 | 15-06-2009 07:36 | |
Резервное копирование linux | ZDemon | Общий по Linux | 15 | 13-06-2006 12:19 | |
Резервное копирование!! | Forest_G | Хочу все знать | 2 | 09-06-2006 17:36 | |
Web-сервер и резервное копирование ? | m2001 | Общий по Linux | 13 | 10-11-2005 17:43 | |
Резервное копирование | dimon55 | Хочу все знать | 1 | 01-08-2003 23:55 |
|