blade001
Goto Top

Backup Script läuft nicht mehr seit der Umstellung auf Win2008 SRV R2

Ich habe eine seltsame Geschichte, mit der ich aktuell nicht voran komme und hoffe über den einen oder anderen Tipp.

Ursprünglich lief auf einem 2003 R2 Srv BackupExec2010 mit einem Script, welches am Ende immer die alten Backup Files gelöscht hatte und eine Erfolgs -oder Fehlermail geschrieben hat.

Seit der Umstellung auf Win2008 R2 Srv werden die alten Dateien nicht mehr gelöscht und auch keine Mail verschickt.

Die Pfade, Benutzer und Berechtigungen sind alle gleich. Jemand vielleicht eine Idee, was ich übersehen habe?

Hier die Batch Datei:

@echo on & setlocal
goto beginn

Das Skript wird als User %computername%\administrator im Scheduler gestartet.
Ist der Systemname XEPR03 werden die Variablen nach dem Label :xepr03 geladen,
ist der Systemname XEPR04 werden die Variablen nach dem Label :xepr04 geladen.
Auf jedem anderen System wird das Skript abgebrochen. Es wird der Inhalt von
C:\temp\%~n0_last_run.txt mit dem Datum verglichen. Ist der Inhalt gleich dem
Datum wird das Skript beendet. Sind die Hosts aus %host0nn% erreichbar, wird
geprueft ob 7za.exe fertig ist. Dann werden die dort liegenden .zip Dateien mit
FTP nach %ftp_host% kopiert. Es werden %day_hold% Versionen auf %ftp_host%
aufgehoben. Am Ende wird eine Mail an %mail_empf% gesendet.

Modifikationen:

:beginn

:: Start Variablen definieren---------------------------------

set day_hold=5
set ftp_check_count=0
set file_menge=0

set bck_user=xets_backup
set bck_pass=vergismeinicht

set ext=zip

set log_dir=c:\prg\admin\logfiles

set input_dir=c:\prg\admin
set input_file=ftp_eex_input.txt
set output_file=ftp_eex_output.txt
set ftp_dir=eex

:: set mail_empf=neugvol@domain.com
set mail_empf=backup@domain.com
set mail_log=%log_dir%\%~n0_Mail.log
set mail_host=xeovms.xeo.de
set text=succeeded

echo %computername% | find /i "xepr0" >nul: 2>&1
if %errorlevel% equ 0 (goto :%computername%) else (echo Falsches System %computername% & exit)

:xepr04
set host001=xemsl2
set host002=xewsl2
set ftp_host=sysdev2.xeo.de
goto :select_ende

:xepr03
set host003=xemsl1
set host004=xewsl1
set ftp_host=sysdev2.xeo.de
goto :select_ende

:select_ende
set mail_server001=cfd001.xeo.de
set mail_server002=cfd002.xeo.de
set mail_port=25

:: Laufzeitvariable
set /a startzeit=%time:~0,2%*3600+%time:~3,1%*600+%time:~4,1%*60+%time:~6,1%*10+%time:~7,1%

set datum=%date:~-4%%date:~3,2%%date:~0,2%
:: Ende Variablen definieren-----------------------------------

if /i not exist C:\temp\%~n0_last_run.txt (goto :continue)

findstr "%datum%" C:\temp\%~n0_last_run.txt
if %errorlevel% equ 0 (echo %0 am %date% bereits gelaufen
goto :ende)

:continue

if /i exist %log_dir%\%output_file%* (del %log_dir%\%output_file%*)
if /i exist %log_dir%\%~n0_Mail_info.txt (del %log_dir%\%~n0_Mail_info.txt)
if /i exist %log_dir%\%~n0_tmp1.txt (del %log_dir%\%~n0_tmp1.txt)
if /i exist %log_dir%\%~n0_tmp2.txt (del %log_dir%\%~n0_tmp2.txt)
if /i exist %log_dir%\%~n0_tmp.txt (del %log_dir%\%~n0_tmp.txt)

for /f "usebackq tokens=2 delims==" %%a in (`set host0`) do set hostx=%%a& call :sub_host
goto :sub_host_ende
:sub_host
ping %hostx% | findstr /b /c:"Reply from " | findstr /c:": bytes=32 time"
if %errorlevel% neq 0 (echo %hostx% nicht erreichbar >>%log_dir%\%~n0_Mail_info.txt
set hostx=
set text=failed
goto :eof)
net use | find /i "%hostx%"
if %errorlevel% neq 0 (net use * \\%hostx%\c$ /user:eex\administrator /p:n)

for /f "usebackq tokens=2" %%b in (`net use ^| findstr /i /c:"%hostx%\C"`) do set drive=%%b
pushd %drive%\temp
for /f "usebackq" %%b in (`dir /b %hostx%_%datum%_*.%ext%`) do set file=%%b
if %file%x equ x (echo Keine Datei auf %hostx% vorhanden >>%log_dir%\%~n0_Mail_info.txt
set file=
set text=failed
goto :eof)
echo %bck_user%>%input_dir%\%input_file%
echo %bck_pass%>>%input_dir%\%input_file%
echo status>>%input_dir%\%input_file%
echo cd %ftp_dir%>>%input_dir%\%input_file%
echo debug>>%input_dir%\%input_file%
echo bin>>%input_dir%\%input_file%
echo put %file%>>%input_dir%\%input_file%
echo dir %file:~0,9%*.%ext%>>%input_dir%\%input_file%
echo status>>%input_dir%\%input_file%
echo bye>>%input_dir%\%input_file%
echo.>>%input_dir%\%input_file%

echo Start FTP %date% %time%>>%log_dir%\%output_file%_%ftp_check_count%

ftp -i -s:%input_dir%\%input_file% %ftp_host% >>%log_dir%\%output_file%_%ftp_check_count% 2>&1

echo End FTP %date% %time%>>%log_dir%\%output_file%_%ftp_check_count%

set /a ftp_check_count+=1
popd
net use %drive% /d
set hostx=
set file=
goto :eof

:sub_host_ende
pushd %log_dir%
for /f "usebackq" %%a in (`dir /b %output_file%_?`) do set file=%%a& call :sub_check_ftp
popd
goto :sub_check_ftp_ende
:sub_check_ftp
findstr /b /c:"226 Transfer complete." %file%
if %errorlevel% neq 0 (echo FTP-Fehler, check %log_dir%\%file% >>%log_dir%\%~n0_Mail_info.txt
set text=failed)

for /f "usebackq tokens=3" %%b in (`findstr /c:"Total of " %file% ^| findstr /c:" files, "`) do set file_menge=%%b
findstr /b /i "xe" %file% | findstr /i ".zip">%log_dir%\%~n0_tmp1.txt

for /f "usebackq tokens=1 delims=." %%b in (%log_dir%\%~n0_tmp1.txt) do echo %%b.zip>>%log_dir%\%~n0_tmp2.txt
type %log_dir%\%~n0_tmp2.txt | sort /+7 /r >%log_dir%\%~n0_tmp.txt

set /a del_num=%file_menge%-%day_hold%
if %file_menge% leq %day_hold% (goto :eof)
C:\Prg\Admin\tools\tail -%del_num% %log_dir%\%~n0_tmp.txt >%log_dir%\%~n0_del.txt

echo %bck_user%>%input_dir%\%input_file%
echo %bck_pass%>>%input_dir%\%input_file%
echo status>>%input_dir%\%input_file%
echo cd %ftp_dir%>>%input_dir%\%input_file%
echo debug>>%input_dir%\%input_file%

for /f %%c in (%log_dir%\%~n0_del.txt) do echo del %%c;* >>%input_dir%\%input_file%

echo status>>%input_dir%\%input_file%
echo bye>>%input_dir%\%input_file%
echo.>>%input_dir%\%input_file%

echo Start FTP %date% %time%>>%log_dir%\%output_file%_del

ftp -i -s:%input_dir%\%input_file% %ftp_host% >>%log_dir%\%output_file%_del 2>&1

echo End FTP %date% %time%>>%log_dir%\%output_file%_del

set /a ftp_check_count+=1


goto :eof
:sub_check_ftp_ende
findstr /c:"Failed to delete file" %log_dir%\%output_file%_del
if %errorlevel% equ 0 (echo Fehler beim loeschen einer Datei auf %ftp_host% >>%log_dir%\%~n0_Mail_info.txt
echo Check %log_dir%\%output_file%_del >>%log_dir%\%~n0_Mail_info.txt
set text=failed)

if /i %text%x neq failedx (echo Alles ok >>%log_dir%\%~n0_Mail_info.txt)

c:\Prg\blat\blat.exe %log_dir%\%~n0_Mail_info.txt -server %mail_host% -f %computername%_EEX_FTP@domain.com -to %mail_empf% -subject "%date% %time:~0,-3% Job %text%">%mail_log%

:ende
set /a endezeit=%time:~0,2%*3600+%time:~3,1%*600+%time:~4,1%*60+%time:~6,1%*10+%time:~7,1%
set /a laufzeit=%endezeit%-%startzeit%
echo Laufzeit war %laufzeit% Sekunden, ftp_check_count = %ftp_check_count%

echo %datum% >C:\temp\%~n0_last_run.txt
endlocal


Danke vorab

Content-Key: 257703

Url: https://administrator.de/contentid/257703

Printed on: April 19, 2024 at 15:04 o'clock

Member: Pjordorf
Pjordorf Dec 15, 2014 at 17:54:50 (UTC)
Goto Top
Hallo,

Zitat von @Blade001:
Jemand vielleicht eine Idee, was ich übersehen habe?
Vielleicht habt ihr einfach angenommen das ein Server 2003 nur ein Server 2003 plus 5 ist. Dem ist nicht so. Das OS hat einige Änderungen erfahren welche zum Teil das was war zu einen das was nicht mehr geht umbaut.

Wer soll was?
Welche Rechte hat derjenige?
Wie wird das alles gestartet? BE2010 Dienst oder angemeldeter Benutzer?
Zugriff von Diensten auf den Desktop nötig?

Auf jedem anderen System wird das Skript abgebrochen.
Wo im Skript wird denn abgebrochen?

Gruß,
Peter
Member: Blade001
Blade001 Dec 15, 2014 at 18:07:46 (UTC)
Goto Top
Danke für die schnelle Antwort.
Asche über mein Haupt, in der Hektik habe ich das falsche Script eingefügt face-sad

zu deinen Fragen:
Es wird von einem für Backup erstellten Benutzer mit Adminrechten gestartet.
Zugriff von Diensten auf den Desktop nicht nötig.

Jetzt aber das Richtige:

@echo off & setlocal
goto :start

Das Skript prueft die Verfuegbarkeit von %source% und %ftphost% mit PING. Wenn beide Systeme verfuegbar
sind, wird mit net use die Admin-Share C$ von %source% verbunden. Danach wird das Vorhandensein von
%checkfile% auf der Share geprueft, dann der Inhalt von %checkfile% auf "Subject:%date%" und
" MySQL-DUMP succeeded" geprueft. War die Pruefung erfolgreich, wird der komplette Namen des
Datenbank-Backup ermittelt. Wenn die Datenbank vorhanden ist, wird der FTP-Input File erzeugt und die
Datenbank mit FTP zu %ftphost% uebertragen. Nach der Uebertragung wird das Ergebnis in %logfile% geprueft.
Als letztes wird eine Mail an %mailempfang% gesendet.
Wenn eine Pruefung fehlschlaegt wird eine Mail mit entsprechendem Text an %mailempfang% gesendet.

Modifikation: 18-Jul-2012 Anzahl der Dateien auf %ftphost% auf %anzahl% begrenzt. (vn V0.2)
27-Aug-2012 Dateierweiterung von .sql auf .zip geaendert

:start
:: Variablen erstellen
set source=xewsl1.xeo.de

set ftphost=sysdev2.xeo.de
set ftpuser=xets_backup
set ftppwd=vergismeinicht
set ftpdir=eex.xewsl1
set ftpinp=C:\Prg\Admin\%~n0_inp.txt

set anzahl=25

set logfile=C:\Prg\Admin\logfiles\%~n0.log
set checkfile=Prg\Admin\logfiles\db_backup_mail.txt

set datum=%date:~6%%date:~3,2%%date:~0,2%

set mail_server=mailhub.domain.de
set mailempfang=backup@domain.com

set subj=succeeded

:: Erster Eintrag in den Logfile
echo Start %date% %time% >%logfile%

:: Pruefen ob %source% erreichbar ist
ping -n 2 %source% | findstr /b /c:"Reply from " | findstr /c:": bytes=" | findstr /c:"ms TTL=" >>%logfile% 2>&1
if %errorlevel% neq 0 (set subj=failed & set text=%date% %time% %source% not reachable & goto :ende)

:: Pruefen ob %ftphost% erreichbar ist
ping -n 2 %ftphost% | findstr /b /c:"Reply from " | findstr /c:": bytes=" | findstr /c:"ms TTL=" >>%logfile% 2>&1
if %errorlevel% neq 0 (set subj=failed & set text=%date% %time% %ftphost% not reachable & goto :ende)

:: Netzwerk Share von %source% verbinden
for /f "usebackq tokens=2" %%a in (`net use * \\%source%\c$ /user:eex\administrator /p:n ^| findstr /C:"is now connected to"`) do set s_drive=%%a

:: War das Verbinden der Share ok und ist %checkfile% vorhanden
if not exist %s_drive%\%checkfile% (set subj=failed & set text=%date% %time% %s_drive%\%checkfile% not found & goto :ende)

:: Prufen ob der Inhalt von %checkfile% dem Suchmuster entspricht
type %s_drive%\%checkfile% | findstr /b /C:"Subject:%date%" | findstr /e /c:" MySQL-DUMP succeeded" >>%logfile% 2>&1
if %errorlevel% neq 0 (set subj=failed & set text=%date% %time% Result from \\%source%\c$\%checkfile% failed & goto :ende)

:: Vollstaendigen Namen des Datenbankbackup ermitteln und das Vorhandensein der Datei pruefen
for /f "usebackq tokens=4" %%a in (`dir %s_drive%\temp\tig_simu_%datum%_??????.zip ^| findstr /i "tig_simu_%datum%_"`) do set file=%%a
if %file%x equ x (set subj=failed & set text=%date% %time% Database not found & goto :ende)

:: FTP-Input Datei erzeugen
echo %ftpuser%>%ftpinp%
echo %ftppwd%>>%ftpinp%
echo cd %ftpdir%>>%ftpinp%
echo dir tig_simu_20*.zip>>%ftpinp%
echo bin>>%ftpinp%
echo put %file%>>%ftpinp%
echo bye>>%ftpinp%

pushd %s_drive%\temp
:: Das Dantenbank-Backup mit FTP zu %ftphost% uebertragen
ftp -i -s:%ftpinp% %ftphost% >>%logfile% 2>&1
popd

:: Ergebnis des FTP pruefen
tail -5 %logfile% | findstr /b /c:"226 Transfer complete." >>%logfile%
if %errorlevel% neq 0 (set subj=failed & set text=%date% %time% FTP-Transfer Error & goto :ende)

set text=%file% Transfer to %ftphost% ok

:: Anzahl tig_simu_* auf %ftphost% feststellen
for /f "useback" %%a in (`findstr /b /i "tig_simu_20" %logfile%`) do call :sub01
goto :next01
:sub01
set /a filecount+=1
goto :eof
:next01

:: Wenn %filecount% kleiner oder gleich als %anzahl% nichts machen
if %filecount% leq %anzahl% (goto :ende)

:: Anzahl der Dateien zum Loeschen
set /a filedelcount=%filecount%-%anzahl%

:: erster Teil des FTP-Input-File fuer das Loeschen auf %ftphost% erzeugen
echo %ftpuser%>%ftpinp%_del
echo %ftppwd%>>%ftpinp%_del
echo cd %ftpdir%>>%ftpinp%_del

:: Dateinamen zum Loeschen auf %ftphost% ermitteln und in den FTP-Input-File eintragen
for /f "usebackq" %%a in (`findstr /b /i "tig_simu_20" %logfile% ^| sort /REC 65535 /+4`) do set ftpfile=%%a& call :sub02
goto :next02
:sub02
if %filedelcount% equ 0 (goto :eof)
set /a filedelcount-=1
echo del %ftpfile%>>%ftpinp%_del
goto :eof
:next02

:: Rest des FTP-Input-File erzeugen
echo bye>>%ftpinp%_del

:: FTP mit dem/n Loeschbefehl/en auf %ftphost% ausfuehren
ftp -i -s:%ftpinp%_del %ftphost% >%logfile%_del 2>&1

:: Ergebnis des Loeschlauf ermitteln
findstr /b /c:"550-Failed to delete file" %logfile%_del >>%logfile% 2>&1
if %errorlevel% equ 0 (set text=%date% %time% Failed to delete file at %ftphost% & goto :ende)

:ende
:: Inhalt von %text% in den %logfile% schreiben
echo %text% >>%logfile%
:: Mail versenden
echo %text% | C:\Prg\blat\blat.exe - -server %mail_server% -f %computername%_Backup@domain.com -to %mailempfang% -subject "%date% %time:~0,-3% TIG_Simu Job %subj%" >>%logfile% 2>&1

:: Netzwerk-Share trennen
net use %s_drive% /d >>%logfile% 2>&1
:: Falls noch eine Netzwerkshare vorhanden ist, diese in %logfile% schreiben
net use >>%logfile% 2>&1

endlocal