Forumi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 17.12.2015., 20:33   #1
potemkin.hr
Akutna lijenčina
Moj komp
 
potemkin.hr's Avatar
 
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:
  • Prva provjera prije samog pokretanja robocopyja; ako je računalo offline/ugašeno nema smisla da 2 sata vrti skriptu i puni log bezveze wait requestima.
  • Druga provjera prije trpanja u arhivu, ako se u međuvremenu računalo ugasilo postoji dobra šansa da robocopy nije svoje odradio do kraja
U oba slučaja bi skripta trebala u predefined lokaciju baciti prazan fajl sa _failed afixom kako bi lako kasnije vidio što je gdje puklo.
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
)
Zajeb je da mi skripta baca fail log fajl i neovisno o tome ako se primarni uvjet izvršio (sinkronizacija uspjela i skripta odradi svoje) pa mi dolaze mailovi za ispravno odrađene taskove.
Zasad sam izbacio if exist loop da mi ne dolaze na mail upozorenja, ali bi rado to osposobio, otvoren sam za razne prijedloge
__________________

potemkin.hr je offline   Reply With Quote
Staro 17.12.2015., 21:52   #2
rodney
only fool, not a horse
Moj komp
 
rodney's Avatar
 
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
Ovo sam nabrzinu sklepa, nemam pojma jesam li krivo pokupio koju zagradu, znak, štoviše i naredbu.. Pokušaj to malo razlomiti da izgleda preglednije.

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
Znači umjesto "echo" što je ispis, spremiš taj string kao poruku unutar maila, ili kao sadržaj onog error fajla...
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!
__________________
"I intend to live forever. So far, so good."

job security - example
rodney je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 17.12.2015., 22:46   #3
Nikky
Moderator
 
Nikky's Avatar
 
Datum registracije: Sep 2006
Lokacija: St
Postovi: 22,572
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 ...
Nikky je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na