Linux 14.982 Themen, 106.376 Beiträge

Komisches Shellskript verhalten

hardez / 21 Antworten / Flachansicht Nickles

Hallo Leute,
ich hab ein seltsames verhalten bei einem Shellskript und weiß leider nicht mehr weiter.

Infos:
Ubuntu Linux (6.06 Dapper LTS) auf einem
Intel Dual Xeon á 1,6 GHz (4x1,6 GHz)
Raid 5 3x80 GB


Soviel zum System an sich.
Auf dem Server läuft VMWare Server 1.02 und in der VMWare läuft momentan ein Exchange Server.
Der Speicherplatz dieser VM ist komplett vorreserviert und nicht in 2GB blöcke aufgeteilt.

Diesen Exchange möchte ich nun per Shellskript auf einen externen NAS sichern.

Shellskript arbeitet (im groben) wie folgt:

-Variablen deklarieren
-VM herunterfahren
-Backup durchführen (Ordner in dem die VM liegt zippen und auf dem NAS speichern)
-VM starten
-Ende

Wenn ich dieses Skript von Hand anschmeiße ist auch alles OK.
Wenn ich dieses Skript auf eine andere VM anwende, bei der der Speicherplatz NICHT vorreserviert ist geht es auch.

Wenn ich allerdings das Skript per Cronjob um 3 Uhr Nachts ausführen lasse, Startet er das Skript, bricht aber nach ca. 4-700 MB Sicheurng OHNE Fehlermeldung ab.
In den Logs ist zumindest kein Fehler ersichtlich.

Jetzt kommt aber nicht mit Sprüchen wie: Dann schmeiß es doch per hand an.
Das geht nämlich nicht, da ich den Server zwischen 6 Uhr morgens und 1 Uhr nachts nicht herunterfahren darf.
Da ich nachts aber nicht arbeite, geht es nur per Cronjob!!

So nun hoffe ich das einer von euch ne Idee hat...

bei Antwort benachrichtigen
KarstenW hardez „Ich greife uach nicht auf die Daten der VM zu, sondern ich sichere die Komplette...“
Optionen

Auf den ersten Blick sehe ich keine Fehler. Ich würde mal für die Diagnose den Rückgabewert von zip auswerten:

Läuft das zip -r .. Backup innerhalb der until Schleife ?
Wenn ja, warum ?
(nickles läuscht alle Tabulatoren. Ich sehe wahrscheinlich nicht ganz die Zugehörigkeit der zip Anweisung)

"echo "Start packing at "$nowtime >>$BackupLog
zip -r $BackupDestination $DirToBackup >>$BackupLog"

Du willst Loddaten von zip in diese Logdatei schreiben. Das wird so nicht funktionieren, zumindest nicht bei den Fehlermeldungen.
Es gibt drei Standardkanäle die automatisch geöffnet und initialisert werden, wenn ein Programm gestartet wird.
Standardeingabekanal mit der Nummer 0, den Standardausgabekanal mit der Nummer 1 und den Standardfehlerkanal mit der Nummer 2
Programme geben in der Regel Fehlermeldungen auf dem Standardfehlerkanal mit der Nummer 2 aus. Die normalen Ausgaben werden an Kanal 1 gesendet.
Wenn du Fehlermeldungen protokollieren willst, dann mußt du Kanal 2 in eine Datei umleiten:
stdout und stderr in gemeinsame Dateien:

>file 2>&1

stdout und stderr in getrennte Dateien:

>file 2>file1

nur stderr in Datei

2> file

Ich nehme mal an wenn du anstelle von ">" ">>" nutzt, dann werden die Daten an die Datei angehängt.

Ich habe da auch immer wieder Probleme und mir deshalb das Buch
Unix Shellprogrammierung von Rainer Krienke gekauft (Hanser Verlag) ;-).



Programme geben mit einer "return 0" Anweisung am Ende der main() Funktion den Rückgabewert 0 zurück, wenn alles O.K. war.
Wenn ein Fehler aufgetreten ist, dann brechen C-Programme mit "exit Rückgabewert" ab. Man kann den Rückgabewert in einem Shellscript auswerten.
In der Variable "$?" ist dieser Rückgabewert gespeichert und man kann diesen Rückgabewert ausgeben lassen oder in Abhängigkeit davon eine Aktion durchführen:

if [ $? != 0 ] ; then
echo " Fehler ist bei zip aufgetreten !"
echo " exit status : $? >> $BackupLog"
fi

Ließ mal die manpage von zip.

Ich weiß nicht warum zip abbricht , aber du kannst ja mal tar nutzen.
(Warum läuft zip innerhalb der Schleife ? Dadurch wird auch zip 10 mal gestartet .)

tar ist ursprünglich für Backups auf Magnetbänder programmiert worden und kann gzip aufrufen um die Daten zu komprimieren.

PS: Ich kann dir dieses Buch empfehlen wenn du nicht gut Englisch kannst:
http://www.amazon.de/Shell-Programmierung-Grundlagen-Werkzeuge-praktische-Skripte/dp/3446407375/ref=sr_1_1/302-9964088-2941623?ie=UTF8&s=books&qid=1181634215&sr=8-1









Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen