alex86
Goto Top

Email versenden nach erfolgreicher Sicherung

Hallo Leute!
Ich sichere unseren Server täglich mit ntbackup. Ist es möglich, dass ich nach der Sicherung eine eMail versende? Grundsätzlich ist mir klar wie das funktionieren könnte, aber ich weiß nicht wie ich eine Batch Datei nach der Sicherung automatisch ausführe ... habt ihr da einen Denkanstoß?

Content-Key: 18354

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

Printed on: April 24, 2024 at 12:04 o'clock

Mitglied: 11078
11078 Oct 24, 2005 at 17:14:11 (UTC)
Goto Top
Hallo,

ich würde die Sicherung bereits über eine Batch-Datei starten lassen (Kommandozeilenoptionen von ntbackup bekommst Du mit "ntbackup /?") und nach erfolgter Sicherung über ein spezielles Kommandozeilen Mailprogramm wie http://www.blat.net/ die Erfolgsmeldung oder auch Fehlermeldung senden.

Ob die Sicherung Erfolgreich war, kannst Du über die Variable %errorlevel% abfragen, denn hier speichert Windows (ab NT?) den letzten systemweit aufgetretenen Fehlercode). Ist diese Variable nicht 0, dann gab es wohl einen Fehler...


Wenn Du ntbackup mit "start /wait ntbackup.exe ..." startest, wird die Email auch wirklich erst dann verschickt, wenn ntbackup fertig ist.

Hoffe, das war Denkanstoß genug face-wink

Gruß,
Tim
Member: alex86
alex86 Oct 25, 2005 at 14:44:59 (UTC)
Goto Top
Hallo!
Ich starte die Sicherung mit folgendem VBA-Script:

sicherung_neu.vbs
Dim Wochentag
Dim Aufruf
Dim Ergebnis

Wochentag = WeekdayName(datepart("w",Date))

Aufruf = "ntbackup.exe backup systemstate "
Aufruf = Aufruf & "@C:\sicherung_neu.bks "
Aufruf = Aufruf & "/F D:\"
Aufruf = Aufruf & "Sicherung_" & Wochentag & " "
Aufruf = Aufruf & "/V:no /R:no /L:s /M normal"

Set objShell = WScript.CreateObject("WScript.Shell")
Ergebnis = objShell.Run(Aufruf,10,True)

Select Case Ergebnis
Case 0
objShell.LogEvent 0, "Ergebniscode der Sicherung ist: " & Ergebnis
Case Else
objShell.LogEvent 1, "Ergebniscode der Sicherung ist: " & Ergebnis
End Select

Set objShell = Nothing

Kann ich in dieses Script den Mailversand integrieren? Bin ziemlicher Anfänger auf dem Gebiet ...
Mitglied: 11078
11078 Oct 25, 2005 at 17:02:00 (UTC)
Goto Top
Hallo,


Set objShell =
WScript.CreateObject("WScript.Shell")
Ergebnis = objShell.Run(Aufruf,10,True)

Hier rufst Du ja ntbackup mit den nötigen Parametern schon als externes Programm auf. Dasselbe kannst Du auch mit Kommandozeilen-Mail-Clients wie dem oben genannte "Blat" machen.


Select Case Ergebnis
Case 0
objShell.LogEvent 0, "Ergebniscode
der Sicherung ist: " & Ergebnis
Case Else
objShell.LogEvent 1, "Ergebniscode
der Sicherung ist: " & Ergebnis
End Select


Du kannst das ja gleich hier in die Abfrage nach dem Ergebnis der Sicherung einbauen, also:

Select Case Ergebnis
Case 0
objShell.LogEvent 0, "Ergebniscode der Sicherung ist: " & Ergebnis  
<span style="color: #ff0000">objShell.Run("blat -<i>viele-viele-Parameter</i>") </span>  
Case Else
objShell.LogEvent 1, "Ergebniscode der Sicherung ist: " & Ergebnis  
<span style="color: #ff0000">objShell.Run("blat -<i>viele-viele-Parameter</i>") </span>  
End Select 



Gruß,
Tim
Member: alex86
alex86 Oct 25, 2005 at 17:19:53 (UTC)
Goto Top
Vielen herzlichen Dank, ich werde es sobald wie möglich ausprobieren!
Member: alex86
alex86 Oct 26, 2005 at 15:29:14 (UTC)
Goto Top
So, hier der angepasste Schnipsel nochmal:

Select Case Ergebnis
Case 0
objShell.LogEvent 0, "Ergebniscode der Sicherung ist: " & Ergebnis
objShell.Run("blat sicherung.txt -s sicherung_erfolgreich -to alex@dick.at")
Case Else
objShell.LogEvent 1, "Ergebniscode der Sicherung ist: " & Ergebnis
objShell.Run("blat sicherung.txt -s sicherung_fehlerhaft -to alex@dick.at")
End Select

Die sicherung.txt existiert eigentlich nur dummy-mäßig, ob das Backup erfolgreich war oder nicht kann man ja eh dem Betreff entnehmen.

Obs funktioniert kann ich noch nicht sagen, muss ich erst ausprobieren später, ich spiele grad ein Backup wieder ein, um zu testen ob das auch funktioniert, dauert noch ein paar Stunden bis ich es testen kann o_O
(Iomega REV Drive, dauert sage und schreibe 4h bis das Backup fertig ist, obwohl es nur 25GB sind. Wird wahrscheinlich daran liegen dass es ca. 120 000 Dateien sind. Aber 4h ist dennoch etsas lang...)

Wie krieg ich denn das Datum auch noch in den Betreff der Mail? Dass ich dann z.b stehn hab "Sicherung vom dd.mm.yyyy erfolgreich/fehlerhaft"?

Wenn ich so schreibe:

objShell.Run("blat sicherung.txt -s sicherung_" & Date & "_erfolgreich -to alex@dick.at")

wirds ja kaum funktionieren... Hach, wenn ichs bloß in PHP schreiben könnte ;>

?dit: Hab jetzt mal die Sicherung manuell gestartet und sie danach abgebrochen. Nun hat er mir komischerweise "sicherung_erfolgreich" gemailt anstatt fehlerhaft ... mal schauen was ich für eine mail erhalte wenn die sicherung wirklich erfolgreich abgeschlossen wurde und nicht per hand abgebrochen wurde.
Dieses Script kann man mit sicherheit noch verbessern ... nur leider fehlt mir die Fähigkeit dazu +g+

Vielen Dank schonmal!
Mitglied: 11078
11078 Oct 26, 2005 at 17:46:52 (UTC)
Goto Top
Hallo,


Wenn ich so schreibe:

objShell.Run("blat sicherung.txt -s
sicherung_" & Date &
"_erfolgreich -to alex@dick.at")

Aber fast richtig:

Datum = DatePart("d",Date) & "." & DatePart("m",Date) & "." & DatePart("yyyy",Date)

Dann kannst Du "Datum" als Variable benutzen.


?dit: Hab jetzt mal die Sicherung manuell
gestartet und sie danach abgebrochen. Nun
hat er mir komischerweise
"sicherung_erfolgreich" gemailt
anstatt fehlerhaft

Moment zwei Dinge!

1) true hat den Zahlenwert 1, false hat den Zahlenwert 0. Du sendest also die genau falschen Meldungen. Mach das anders herum.


2) Ergebnis = objShell.Run(Aufruf,10,True) liefert true (1) zurück, wenn der Aufruf von ntbackup erfolgreich war - und auch wenn Du ntbackup dann abbrichst, ändert sich daran nichts.

Wenn Du wissen willst, ob die Sicherung tatsächlich positiv abgeschlossen wurde, bringt das so meiner Meinung nach nichts. Wie man es aber in vbs hinbekommt, weiß ich gerade auch nicht: dafür sind meine vbs Kenntnisse zu minimal. Aber es gibt hier ja auch einen VBS Bereich, wo Du nochmal dahingehend nachfragen könntest.

Bei Batch hätte ich jetzt die Umgebungsvariable %errorlevel% abgefragt; wenn die ungleich 0 ist, gab es einen Fehler. Vielleicht kann man das aber auch per vbs abfragen oder es gibt hier sogar bessere Methoden.

Sorry!

Tim
Member: Biber
Biber Oct 26, 2005 at 23:25:57 (UTC)
Goto Top
Moin alex86,

ich habe ein bisschen gezögert, ob ich zu diesem eigentlich abgeschlossenen Thread auch noch meinen Senf dazugeben soll. Mach ich nun aber doch.

Also - meine Gedanken beim Lesen des Threads waren natürlich:

Wozu denn hier *.vbs? Sind doch nur Aufrufe von NTBackup, ErrorLevel abprüfen und dann eine Zeile Blat-Mail. Keine bunten Messageboxen, alles silent, bestenfalls ein bisschen Loggerei. Also klassische Batch-Anwendung. Seh ich auch immer noch so.

Andererseits... wenn es läuft... never change a running system ...
and never run a changing system...
Also was solls... dann halt mit VBScript, egal...bin ja kein Fanatiker... face-wink

Nach der letzten Entwicklung allerdings - Wenn sich anscheinend nicht mal feststellen lässt, was denn nun der Errorlevel bzw. das Ergebnis der eigentlichen Sicherung war (das war doch das wesentliche Ziel ursprünglich, oder?), dann würde ich das doch via Batch abfackeln.

Selbst wenn ich da für die "saubere" Wochentagsermittlung wieder einen VBScript-Zweizeiler nutzen würde (den aus dem <a href= target="blank">Batch-Tut III<a>).
Ich würde hier also die GetAllDateTimeInfos.bat nutzen.
Falls also noch Interesse an einer Batch-Variante besteht:
::--- Kurzskizze der Sicherung als Batch---ungetestet--
@echo off & setlocal
Call GetAllDateTimeInfos /s /q
:: (alle Variablen sind gesetzt - ich brauche nur den %cDoW%.. cDayOfWeek) 
Set Wochentag=%cDoW%
Call GetAllDateTimeInfos /u 

ntbackup.exe backup systemstate @C:\sicherung_neu.bks /F D:\  "Sicherung_%Wochentag% /V:no /R:no /L:s /M normal"   

IF ErrorLevel 4 goto NTBackupMemoryProb
IF ErrorLevel 2 goto NTBackupCanceledByUser
IF ErrorLevel 1 goto NTBackupFailed
::NoError
blat sicherung.txt -s sicherung_erfolgreich -to alex@dick.at
goto :eof

:NTBackupFailed
blat sicherung.txt -s sicherung_indieGruetze -to alex@dick.at
goto :eof
....
..
::--- Kurzskizze der Sicherung als Batch---ungetestet--

HTH
Frank / der Biber aus Bremen
Member: alex86
alex86 Oct 27, 2005 at 07:18:39 (UTC)
Goto Top
Hallo!

Cool danke, werde das heute gleich testen.

Hab btw heute um 4 Uhr nachts eine Mail vom Server bekommen, dass er das Backup erfolgreich abgeschlossen hat. Da er aber wahrscheinlich auch "erfolgreich" schickt wenns fehlerhaft war, kann man der Mail nicht wirklich Glauben schenken ;>

Kann man denn den Ergebniscode in den Mail-Body schreiben? Bin noch nicht draufgekommen wie man bei blat den Body in der Commandline übergibt ... ausser eben via Datei, so wie ich's jetzt habe.

Vielen Dank für eure großartige Hilfe, wirklich ein Super Forum hier, muss ich schon sagen :>
Mitglied: 11078
11078 Oct 27, 2005 at 07:31:36 (UTC)
Goto Top
Hallo,

wie ich in meinem allerersten Post ja auch schon vorgeschlagen habe, ist Batch wirklich die allereinfachste (und damit meist auch die beste) Lösung.

Zu Deiner letzten Frage:

blat -body "Mein Mailtext" ...

So muss man den Text der Mail nicht in eine Textdatei packen.

Siehe auch: http://www.blat.net/syntax/syntax.html


Gruß,
Tim
Member: alex86
alex86 Oct 27, 2005 at 08:10:28 (UTC)
Goto Top
Joa, so hätte ich mir das auch gedacht, hat aber auf der Kommandozeile so nicht funkioniert. Die syntax.txt hab ich mir natürlich zu Gemüte geführt, bin aber nicht schlau draus geworden (da steht irgendwas mit hyphen (-) ) ... naja, später gibts den Bericht obs funktioniert hat oder nicht, bin gerade noch in der Arbeit ;>
Member: alex86
alex86 Oct 27, 2005 at 15:00:23 (UTC)
Goto Top
Okay, habs jetzt ausprobiert, das Script sieht jetzt folgendermaßen aus:

@echo off & setlocal
Call GetAllDateTimeInfos /s /q

Set Wochentag=%cDoW%
Call GetAllDateTimeInfos /u

ntbackup.exe backup systemstate @C:\sicherung_neu.bks /F D:\ "Sicherung_%Wochentag% /V:no /R:no /L:s /M normal"

IF ErrorLevel 4 goto NTBackupMemoryProb
IF ErrorLevel 2 goto NTBackupCanceledByUser
IF ErrorLevel 1 goto NTBackupFailed

:NoError
blat -body "sicherung erfolgreich!" -s "sicherung erfolgreich" -to alex@dick.at
goto :eof

:NTBackupFailed
blat -body "sicherung fehlerhaft" -s "sicherung fehlerhaft" -to alex@dick.at
goto :eof

:NTBackupMemoryProb
blat -body "speicherprobleme" -s "sicherung fehlerhaft" -to alex@dick.at
goto :eof

:NTBackupCanceledByUser
blat -body "sicherung von benutzer abgebrochen" -s "sicherung fehlerhaft" -to alex@dick.at
goto :eof



Rauskommen tut das:
C:\>sicherung.bat
Der Befehl "GetAllDateTimeInfos" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "GetAllDateTimeInfos" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Blat v2.5.0 w/GSS encryption (build : Sep 14 2005 22:46:29)

Sending stdin.txt to alex@dick.at
Subject: sicherung fehlerhaft
Login name is xanth0s@dick.at
Try number 1 of 5.

C:\>


Email bekomm ich folgende:
:NTBackupMemoryProb
blat -body "speicherprobleme" -s "sicherung fehlerhaft" -to alex@dick.at
goto :eof

Also eine Mail mit dem Body "speicherprobleme" und dem Betreff "sicherung fehlerhaft"

Ich glaub irgendwas hab ich da noch nicht so richtig verstanden ;)

Edit: Möööööp ... hab vergessen die GetAllDateTimeInfos.bat zu erstellen. hab ich jetzt gemacht, die Datei aus dem oben genannten Topic. Nun tritt die Fehlermeldung nicht mehr auf, aber er führt das backup nicht aus. Ntbackup öffnet sich ganz kurz, danach ist sense ;>

Aha, der Fehler liegt in folgender Zeile:
ntbackup.exe backup systemstate @C:\sicherung_neu.bks /F D:\ "Sicherung_%Wochentag% /V:no /R:no /L:s /M normal"

Hab in der Ereignisanzeige drin stehn
NTBackup-Fehler: 'Ungültigen Befehlszeilenparameter in 'normal'.'

Also irgendwas muss da syntaktisch nicht stimmen, hab selber probiert ein ewnig rumzusopielen, aber es hat nichst geholfen.

MfG
Alex
Member: Biber
Biber Oct 27, 2005 at 15:24:46 (UTC)
Goto Top
Moin Alex,

hab grad bei M$ angerufen... die haben anscheinend meine GetAllDateTimeInfos.bat noch nicht standardmäßig mit ausgeliefert...
vermutlich verstehen die meinen Code wieder mal nicht in Redmond..
Na, ich deren Code auch nicht immer.. face-big-smile

Du findest eine Copy&Paste-bare (welch eine Wortschöpfung!) Kopie in meinem Batch-Tutorial III ..siehe den Link oben. [Edit]...schon erledigt, hab ich zu spät gesehen. [/Edit]

Kopier Dir die irgendwohin in Deinen %path% oder gib den Pfad explizit an im Batch.

Sorry für die anderen Tippfehler..sollte nur eine Skizze sein.
Da sind nur die Anfü-Zeichen zuviel!! Das vor dem Wort 'Sicherung_....' und das am Ende
...F D:\ "Sicherung_%Wochentag% ...

Die ErrorLevel von NTBackup sind auch nur Beispiele... schau lieber in der NTBackup-Doku nach.
ErrorLevel 4 (oder höher) ist offensichtlich "SyntaxFehler" beim NTBackup-Aufruf. face-wink

Mach doch die Parameter analog zu der lesbaren Minik im VBScript
Set "NTPara=systemstate @C:\sicherung_neu.bks"
Set "NTPara=%NTPara% /F D:\ Sicherung_%Wochentag%"
Set "NTPara=%NTPara% /V:no /R:no /L:s /M normal"
...
ntbackup.exe %NTPara%

Aber erst nach dem Setzen der %Wochentag%-Variablen. *gg


Grüße
Biber
Member: alex86
alex86 Oct 28, 2005 at 14:51:37 (UTC)
Goto Top
So, mein Script sieht jetzt so aus:


@echo off & setlocal
Call c:\GetAllDateTimeInfos.bat /s /q

Set Wochentag=%cDoW%
Call c:\GetAllDateTimeInfos.bat /u

Set "NTPara=backup systemstate @C:\sicherung_neu.bks"
Set "NTPara=%NTPara% /F D:\ Sicherung_%Wochentag%"
Set "NTPara=%NTPara% /V:no /R:no /L:s /M normal"

ntbackup.exe %NTPara%


IF ErrorLevel 4 goto err_lvl4
IF ErrorLevel 3 goto err_lvl3
IF ErrorLevel 2 goto err_lvl2
IF ErrorLevel 1 goto err_lvl1
IF ErrorLevel 0 goto success_lvl

:err_lvl4
blat -body "sicherung fehlerhaft" -s "sicherung fehlerhaft" -to alex@dick.at
goto :eof

:err_lvl3
blat -body "sicherung fehlerhaft (abgebrochen)" -s "sicherung fehlerhaft" -to alex@dick.at
goto :eof

:err_lvl2
blat -body "sicherung fehlerhaft (dateizugriffs konflikt)" -s "sicherung fehlerhaft" -to alex@dick.at
goto :eof

:err_lvl1
blat -body "sicherung fehlerhaft (keine dateien zum sichern gefunden)" -s "sicherung fehlerhaft" -to alex@dick.at
goto :eof

:success_lvl
blat -body "sicherung erfolgreich!" -s "sicherung erfolgreich" -to alex@dick.at
goto :eof


und wieder selbiger Fehler in der Ereignisanzeige.
Die Variable %Wochentag% ist anscheinend leer, deswegen funktionierts nicht. Nur hab ich keine Ahnung wieso sie leer ist ;>
Member: Biber
Biber Oct 28, 2005 at 15:10:41 (UTC)
Goto Top
Moin Alex,

blöde Tippfehler... *grmpff
Set "NTPara=backup systemstate @C:\sicherung_neu.bks"
Set "NTPara=%NTPara% /F D:\ Sicherung_%Wochentag%"
Set "NTPara=%NTPara% /V:no /R:no /L:s /M normal"

In der zweiten Zeile ist ein Leerzeichen zwischen "D:\" und "Sicherung..."
Und daher auch immer noch der Syntaxfehler.

[ Nicht zielführende Zwischenfrage:
Weiß eigentlich irgend jemand hier, warum M$'s Praktikanten bei NTBackup manche Parameterspezifikationen mit und manche ohne Doppelpunkt erwarten? Oder hat Bill diesen Job wieder irgendwelchen Azubis und umgeschulten Pizzabäckern zugeschoben??
Alberne Montagsproduktionen...
]

Wieso glaubst Du, dass %cDow% nicht gesetzt ist?
(Wieso zweifeln immer alle an meinen Bätchen? *heuuuuuuuul)
Mach doch da bitte mal am CMD-Prompt den Test, ob denn ein Aufruf "GetAllDateTimeInfos" etwas sinnvolles tut.
Vielleicht ist da wieder mal eine verkehrte Zeile umgebrochen beim Copy&Paste.

Tapfer sein, wir bringen das schon zum Fliegen...
Frank / der Biber aus Bremen