|
17.12.2015., 20:33 | #1 |
Akutna lijenčina
Datum registracije: Aug 2006
Lokacija: Fiume
Postovi: 1,804
|
Batch skripta za sync sa remote hosta
Radim jednu skriptu koja bi trebala prekopirati trenutno stanje neke mape udaljenog računala u lokalnu mapu i spremiti changelog, a nakon toga na dnevnoj bazi pakirati u .zip sa dodanim datumom. To sam uspio napraviti jednostavno sa kombinacijom robocopyja i 7za, ali moram još nekako uvrstiti kontrolu u 2 stupnja da li je računalo online:
Na serveru sam dodao preko File screening policyja da mi automatski mailom dojavi ako se pojavi koji _failed.txt fajl i stvar šljaka da bi skripta šljakala kako spada. Uspio sam skemijati si skriptu koja radi, ali izbacuje fail log Code:
IF EXIST "\\192.168.121.2\c$" ( robocopy "\\192.168.121.2\c$\share" "D:\Store\ProgressULJ" *.* /mir /copyall /zb /np /xf lbia*.* rcda*.* srta*.* dbi*.* *.lk /r:2 /log+:"C:\Logs\Sync-progressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%.txt") else (type NUL > C:\Logs\Sync-progressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%_failed.txt ) IF EXIST "\\192.168.121.2\c$" ( 7za a -tzip "D:\Daily\ProgressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%.zip" "D:\Store\ProgressULJ\*" -mx=5) else (type NUL > C:\Logs\Sync-progressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%_failed.txt ) Zasad sam izbacio if exist loop da mi ne dolaze na mail upozorenja, ali bi rado to osposobio, otvoren sam za razne prijedloge |
17.12.2015., 21:52 | #2 |
only fool, not a horse
Datum registracije: Apr 2008
Lokacija: near zgb
Postovi: 1,276
|
Nisam siguran da sam dobro razumio sto ti skripta radi.. Dakle sad imaš (nekakav pseudokod): if "živ" robocopy + log else log if "živ" 7z else log I problem je ako se robocopy uspješno izvrši i onda se ugasi pc? Za to ne trebaš dva put provjeravati je li server živ, već samo za robocopy. Robocopy ti vrati status da li se uspješno izvršio ili ne. Laički, trebaš pokušati robocopy, ako uspije super, ako ne kreiraj taj "fail" file. To se u programiranju zove "try - catch". Ovako nabrzaka, bez iole relevantnog iskustva sa batch skriptama (u svoju obranu napisao sam "pokoju" shell, python, php skriptu) bi to bilo ovako nekako: Code:
IF EXIST "\\192.168.121.2\c$" ( robocopy "\\192.168.121.2\c$\share" "D:\Store\ProgressULJ" *.* /mir /copyall /zb /np /xf lbia*.* rcda*.* srta*.* dbi*.* *.lk /r:2 /log+:"C:\Logs\Sync-progressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%.txt") IF %ERRORLEVEL% NEQ 0 GOTO ProcessError 7za a -tzip "D:\Daily\ProgressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%.zip" "D:\Store\ProgressULJ\*" -mx=5 IF %ERRORLEVEL% NEQ 0 GOTO ProcessError exit /b 0 :ProcessError type NUL > C:\Logs\Sync-progressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%_failed.txt exit /b 1 Možeš se malo igrat s error codovima, vidim npr. ovdje da se vraćeni statusi manji od 9 ne smatraju fatalnim greškama (za i samo za robocopy, svaka metoda ima svoje, to nije nekakvo općenito pravilo).. Osim nekakve estetike, tu bi se još moglo par sitnica popraviti. Npr, zašto prazan "fail" file, kad možeš unutra spremiti i koji je error bio, iz varijable %ERRORLEVEL%.. Možda nebi bilo loše i odmah iz skripte poslat mail zajedno sa tom porukom o grešci koristeći preuređeni kod odavde: Code:
if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end if %ERRORLEVEL% EQU 8 echo FAIL & goto end if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end if %ERRORLEVEL% EQU 2 echo XTRA & goto end if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end if %ERRORLEVEL% EQU 0 echo No Change & goto end :end Ispalo mi je slučajno ovako sve u jednoj liniji zbog c/p, ali neka, da vidiš kako je meni bilo (to je sa onog linka robocopy exit codes pa možeš tamo vidjet) Sretno! |
|
|
Oglas
|
|
17.12.2015., 22:46 | #3 |
Moderator
Datum registracije: Sep 2006
Lokacija: St
Postovi: 22,575
|
Možda ti je lakše da upotrebiš AutoIt ili sl. alat da dobiješ bolji rezultat, a osim toga tada imaš na raspolaganju cijeli set funkcija / kontrola ... |
|
|
Oglas
|
|
|
|