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/netcat), können wir mit folgendem Script E-Mails verschicken:
#!/bin/sh
###################################################
# Author: Michael Simmer
# Date: 23.10.2010
# Version: 0.2
# Contact: http://www.zeux.at/
###################################################
netcat="/vmfs/volumes/primary/custom/netcat"
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/backuplog.txt
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/backuplog.txt /vmfs/volumes/primary/custom/temp.txt
grep "info" /vmfs/volumes/primary/custom/temp.txt | grep -v "CONFIG" > /vmfs/volumes/primary/custom/backuplog.txt
rm /vmfs/volumes/primary/custom/temp.txt
Mein "Zwischenscript" (welches ich unter /vmfs/volumes/primary/custom/backup.sh abgelegt habe) sieht in etwa so aus:
#!/bin/sh
/vmfs/volumes/primary/custom/ghettoVCB.sh -f /vmfs/volumes/primary/custom/vmlist -c /vmfs/volumes/primary/custom/conf -l /vmfs/volumes/primary/custom/backuplog.txt
mv /vmfs/volumes/primary/custom/backuplog.txt /vmfs/volumes/primary/custom/temp.txt
grep "info" /vmfs/volumes/primary/custom/temp.txt | grep -v "CONFIG" > /vmfs/volumes/primary/custom/backuplog.txt
rm /vmfs/volumes/primary/custom/temp.txt
/vmfs/volumes/primary/custom/sendmail.sh x.x.x.x esxi@domain.local mik@domain.local "ESXi Backup Log" /vmfs/volumes/primary/custom/backuplog.txt
rm /vmfs/volumes/primary/custom/backuplog.txt
In die /etc/rc.local trage ich also folgendes ein:
echo "0 1 * * 3 /vmfs/volumes/primary/custom/backup.sh" >> /var/spool/cron/crontabs/root
somit sieht mein cronjob nachher so aus:
0 1 * * 3 /vmfs/volumes/primary/custom/backup.sh
Kommentare
Funktioniert super, vielen
Funktioniert super, vielen Dank für das Script!!!
netcat binary not found
Hi,
wenn ich das Skript ausführen möchte bekomme ich den Fehler "netcat binary not found". Welcher teil des RPM-Archives muss sich in dem unter "netcat=" spezifizierten Pfad befinden?
Grüße
Sebastian
RE: netcat binary not found
Hallo,
wenn man das RPM-Archiv entpackt sollte die netcat-Binary im Ordner "usr/bin" liegen!
lg,
mik
RE: netcat binary not found
Hi,
Hat sich erledigt. Ich hatte schon die richtige binary. Der Fehler lag ein einem Tippfehler bei der Pfadangabe im sendmails.sh^^
Danke für die Antwort!
Genial!
Super Genial!
Vielen Dank!
Allerdings stimmen bei den mails die bei mir ankommen die Zeilenumbrüche im Log nicht mehr...
Was wiederum dazu führt das das Log quasi absolut unleserlich ist.
Eine Idee?
Re: Genial!
Hallo!
Versuch doch bitte mal folgendes als backup.sh Script:
#!/bin/sh
/vmfs/volumes/primary/custom/ghettoVCB.sh -f /vmfs/volumes/primary/custom/vmlist -c /vmfs/volumes/primary/custom/conf -l /vmfs/volumes/primary/custom/backuplog.txt
/vmfs/volumes/primary/custom/sendmail.sh x.x.x.x esxi@domain.local mik@domain.local "ESXi Backup Log" /vmfs/volumes/primary/custom/backuplog.txt
rm /vmfs/volumes/primary/custom/backuplog.txt
Dann bekommst du zwar das ganze Logfile als E-Mail - könnte aber evtl. das Problem mit den Zeilenumbrüchen lösen.
Bin schon gespannt ob dies hilft.
lg,
mik
netcat on ESXi
Hi mik,
thanks for sharing nc and your cool scripts for ESXi :-)
-Florian
Inhalt der Datei wird zweimal in die eMail kopiert
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
Re: Inhalt der Datei wird zweimal in die eMail kopiert
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
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
netcat ESXi mail
544 SMTP sycronization error
keine Ahnung was ich noch machen soll habe Alles ausprobiert aber der Fehler bleibt
Gruß Markus
Re: netcat ESXi mail
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