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/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

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <img> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Zeilen und Absätze werden automatisch erzeugt.

Weitere Informationen über Formatierungsoptionen

CAPTCHA
Diese Frage dient dazu festzustellen, ob Sie ein Mensch sind und um automatisierte SPAM-Beiträge zu verhindern, bitte auf Groß- und Kleinschreibung achten!
                    ____   __   __  ____     ____ 
_ __ ___ ____ | __ ) \ \ / / | _ \ / ___|
| '_ ` _ \ |_ / | _ \ \ V / | | | | | |
| | | | | | / / | |_) | | | | |_| | | |___
|_| |_| |_| /___| |____/ |_| |____/ \____|
Enter the code depicted in ASCII art style.