VMWare ESXi Backuplog per E-Mail verschicken
Ich habe ja letzte Woche eine Anleitung veröffentlicht, wie man auf dem VMWare ESXi Hypervisor wunderbar Backups macht.
Allerdings will man natürlich nicht immer nachsehen, ob die Backups nun erfolgreich waren oder nicht.
Deshalb die Idee der ESXi Server könnte doch einfach ein E-Mail schicken mit den Logfile des Backups?
Tja, das Problem ist wohl das der ESXi (wohl aus Sicherheitsgründen) wirklich sehr abgespeckt ist, und deswegen keine Möglichkeit um E-Mails zu versenden besitzt.
Aber ich hab mir da etwas einfallen lassen!
Nach langem suchen bin ich auf die Idee gekommen wir könnten doch einfach E-Mails verschicken mit Hilfe von netcat und einem Shell-Script!
netcat ist hier zu bekommen, ich habe hierbei einfach das i386 RPM-Paket runtergeladen und lokal entpackt.
Darin befindet sich eine netcat Binary die auch auf dem ESXi funktioniert!
Für die, die es ganz eilig haben, können Version 0.7.1 hier herunterladen (keine Garantie auf Aktualität).
Nachdem wir die netcat Binary auf den Server kopiert haben (in meinem Fall unter /vmfs/volumes/primary/custom/n
#!/bin/sh
##############################
# Author: Michael Simmer
# Date: 23.10.2010
# Version: 0.2
# Contact: http://www.zeux.at/
#############################
netcat="/vmfs/volumes/primary/
tmp="/tmp/mail"
hostname=`hostname`
if [ -f $netcat ]
then
if [ $# -eq 5 ]
then
echo -e "HELO $hostname\r" > $tmp
echo -e "MAIL FROM: $2\r" >> $tmp
echo -e "RCPT TO: $3\r" >> $tmp
echo -e "DATA\r" >> $tmp
echo -e "From: $2\r" >> $tmp
echo -e "To: $3\r" >> $tmp
echo -e "Subject: $4\r" >> $tmp
echo -e "\r" >> $tmp
if [ -f $5 ]
then
awk '{printf("%s\r\n", $0);}' < $5 >> $tmp
#cat $5 >> $tmp
#echo -e "\r" >> $tmp
else
echo "Error: File not found!"
rm $tmp
exit 1
fi
echo -e ".\r" >> $tmp
echo -e "quit\r" >> $tmp
$netcat -i 1 $1 25 < $tmp
rm $tmp
else
echo "Usage: ./sendmail.sh "
exit 1
fi
else
echo "Error: netcat Binary not found!"
exit 1
fi
bzw. hier zum Herunterladen.
Das Script ist sehr leicht zu benutzen, einfach ./sendmail.sh [Mailserver] [von E-Mail Adresse] [an E-Mail Adresse] [Betreff] [Datei, dessen Inhalt in der Mail sein soll]
Beispiel: ./sendmail.sh mein.mailserver.com esxi@example.com empfaenger@example.com "ESXi Backup Logfile" /vmfs/volumes/primary/custom/b
Um nun auch ein Backuplog zu haben, das wir verschicken können, müssen wir bei unserem ghettoVCB.sh Script noch -l [/pfad/zum/logfile] anhängen.
Nun gibt es mehrere Möglichkeiten das Backuplog zu verschicken:
1. Wir verschicken das Backuplog per cronjob einige Zeit nach dem Backup per Mail weg.
Dazu brauchen wir einfach einen weiteren cronjob, der das sendmail.sh Script einige Stunden später aufruft.
2. Wir bauen den sendmail.sh Befehl in das ghettoVCB.sh Script ein, damit es nach dem Backup das Backuplog verschickt.
Wo ihr den sendmail.sh Befehl einbauen müsst, müsst ihr euch aber selbst raussuchen!
3. Wir bauen ein weiteres Script, dass das ghettoVCB.sh Script aufruft, und danach das sendmail.sh Script ausführt, und tragen dieses als cronjob ein.
Wem das komplette Backuplog zu lange ist, der baut einfach dazwischen noch folgendes ein:
mv /vmfs/volumes/primary/custom/b
grep "info" /vmfs/volumes/primary/custom/t
rm /vmfs/volumes/primary/custom/t
Mein "Zwischenscript" (welches ich unter /vmfs/volumes/primary/custom/b
#!/bin/sh
/vmfs/volumes/primary/custo
mv /vmfs/volumes/primary/custom/b
grep "info" /vmfs/volumes/primary/custom/t
rm /vmfs/volumes/primary/custom/t
/vmfs/volumes/primary/custo
rm /vmfs/volumes/primary/custom/b
In die /etc/rc.local trage ich also folgendes ein:
echo "0 1 * * 3 /vmfs/volumes/primary/custom/b
somit sieht mein cronjob nachher so aus:
0 1 * * 3 /vmfs/volumes/primary/custom/b

Kommentare
Hi mik,
thanks for sharing nc and your cool scripts for ESXi :-)
-Florian
Hallo Mik,
vielen Dank für das wirklich tolle Script. Eine kleine Frage hätte ich, bitte: Warum wird der Inhalt der zu versendenden Datei zweimal (direkt hintereinander) in den Body der eMail kopiert?
Danke vorab,
Grüße
Thomas
Hallo Thomas,
kann es sein, dass du die beiden Zeilen die mit # auskommentiert sind, ohne das # übernommen hast?
(#cat $5 >> $tmp, #echo -e "\r" >> $tmp)
Denn dann kann es passieren das du die Datei 2 mal bekommst.
lg,
mik
Hallo Mik,
... YES! ;-)
So einfach kann es sein, wenn man sich auskennt. Habe ich wirklich übersehen - sorry!
Vielen Dank für Deine schnelle Hilfe,
Viele Grüße
Thomas
544 SMTP sycronization error
keine Ahnung was ich noch machen soll habe Alles ausprobiert aber der Fehler bleibt
Gruß Markus
Hallo!
Welcher Mail-Server?
hast du es bei netcat mit dem argument "-w 1" schon versucht?
Habe meine Version nur auf Microsoft Exchange 2007 getestet! :)
lg,
mik
Kommentar hinzufügen