ubuntuusers.de

Mini-Backup-Script + Cronjob -> komisches Verhalten

Status: Ungelöst | Ubuntu-Version: Ubuntu 7.10 (Gutsy Gibbon)
Antworten |

Thoemchen

Anmeldungsdatum:
21. Februar 2008

Beiträge: Zähle...

Hallo zusammen,

ich habe irgendwie ein komisches Problem.
Für unser MySQL Backup (Wiki + Zabbix) und Backup der Wiki-Daten habe ich ein paar kleine Backup Scripte erstellt.
Zugegeben ich habe bis vor ein paar Tagen absolut keine Ahnung gehabt von Linux/Ubuntu (und schon gar nicht dem Scripting dahinter), aber das Wiki läuft gut und der Zabbix monitored alles soweit.
Bisher scheinen auch die Backup Scripte im /root/ Verzeichniss auch gut zu funktionieren, jedoch zicken diese beim Aufruf als Cron (in der Nacht) ein wenig rum.

Zunächst einmal das Script in /root/backup_wikizabbix/:

backup_wikizabbix_daily.sh:

#!/bin/bash
mysqldump --database wikidb --add-drop-table -B > `date +%y-%m-%d`_wikidb.sql
mysqldump --database zabbix --add-drop-table -B > `date +%y-%m-%d`_zabbix.sql
zip -r /media/ferrytnas1wiki/backup/daily/`date +%y-%m-%d_%a`.zip /var/www/aswiki/ `date +%y-%m-%d`_wikidb.sql `date +%y-%m-%d`_zabbix.sql -x /media/ferrytnas1wiki/backup/daily/
rm `date +%y-%m-%d`_wikidb.sql
rm `date +%y-%m-%d`_zabbix.sql


#Count files in directory
file_count=`ls -1A /media/ferrytnas1wiki/backup/daily/ | wc -l`

#Do until there are less than 8 files present
while [ $file_count -ge 8 ]
 do
  #Delete alphabetically oldest file
  rm `ls -lArR /media/ferrytnas1wiki/backup/daily | ruby /root/backup_wikizabbix/lR2fullpath.rb | tail -1`
  #Count files again
 file_count=`ls -1A /media/ferrytnas1wiki/backup/daily/ | wc -l`
done

Es macht einfach 2 Dumps der Datenbanken 'wikidb' und 'zabbix' und soll diese zusammen mit den Wiki-Daten in ein .zip Verzeichniss packen.
Dieses wird daraufhin auf ein (Windows)Netzlaufwerk in das Verzeichniss /backup/daily/ verschoben.
Die Daten heißen daraufhin: 08-02-20_Mi.zip

Abschließend soll er das Verzeichniss überprüfen und nur die 7 neusten Datein übriglassen.
Dieses Script funktioniert auch, solange ich es direkt unter dem root-Account mit ./backup_wikizabbix_daily.sh aufrufe.
Er macht mir alles wie er soll, ich erhalte auch keine Warnings oder ähnliches.

Jetzt habe ich das via crontab -e in die persönlichen cronjobs des Accounts root eingetragen, in der Hoffnung er würde mir das auch so erledigen wie gewünscht.

crontab -e:

# m h  dom mon dow   command
#0-59 0-23 1-31 1-12 0-6(0=Sunday) /usr/bin/somecommand
0 */4 * * * /usr/bin/ntpdate -u GEREHIDCO004
0 5 * * * /root/backup_wikizabbix/backup_wikizabbix_daily.sh
0 18 * * 0 /root/backup_wikizabbix/backup_wikizabbix_weekly.sh
0 4 1 * * /root/backup_wikizabbix/backup_wikizabbix_monthly.sh
0 1 30 12 * /root/backup_wikizabbix/backup_wikizabbix_yearly.sh
#49 9 * * * /root/backup_wikizabbix/backup_wikizabbix_test.sh

Er ruft das Script zwar laut /var/log auf:
"Feb 21 05:00:01 gerehizbx001 /USR/SBIN/CRON[11162]: (root) CMD (/root/backup_wikizabbix/backup_wikizabbix_daily.sh"

Haken dabei: Er erstellt mir eine komische, wenige Kilobyte kleine Datei (anstatt der .zip) im backup-Verzeichniss: ziuN7TRj (29 KB)
Diese Dateinamen variieren immer ein wenig, beginnen jedoch meistens(immer?) mit zi*****. Die Dateigrößen variieren auch manchmal um ganz wenige KB. Nach einem Blick im Editor auf die Datei scheint es mir, dass diese Datei evtl. den Index der .zip Datei gespeichert hat? Es sind zwar viele unleserliche Zeichen darin, aber ein an ein paar Stellen stehen Verzeichniss in voller Länge+Dateinamen in Klartext.

Ich würde mich über ein wenig Unterstützung sehr freuen, habe mir schon viele Stunden dieses Problem um die Ohren gehauen und bin so langsam mit meinem Rat am Ende.

Gruß
-Thomas

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

Ein MySQL Backup mache ich hier anders: Einfach ein direktes Backup von /var/lib/mysql. Man hat keine Probleme mit Zeichenkodierungen, es geht irre fix und man kann sehr einfach das Backup wieder einspielen.

Hier mein Script dafür: http://paste.pocoo.org/show/29133/
Eigentlich nur ein Flush der DB, dann rsync, dann ein Flush, dann ein rsync und gut ist.

hendy

Anmeldungsdatum:
15. September 2007

Beiträge: 61

Hallo Thomas!

Hast Du mal ausprobiert, die Befehle mit komplettem Pfad hinzuschreiben: Cron#head-6cba923fe7e7aba704bce7d61cc0e367141b4e54
Wie der Pfad eines Befehls ist, bekommst Du z.B. mit whereis mysqldump heraus.

Wenn auf Deinem System eine lokale Mailzustellung läuft (z.B. per exim oder Postfix) werden Fehlermeldungen an das Postfach des jeweiligen Users geschickt, die dann per mutt abgerufen werden können. (Die anderen Pakete, die im mutt-Artikel beschrieben sind, braucht man nicht zwangsläufig.)

Viele Grüße,
Hendy

Thoemchen

(Themenstarter)

Anmeldungsdatum:
21. Februar 2008

Beiträge: 4

Also das mit dem Pfad hat ebenfalls nicht geklappt...

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
# m h  dom mon dow   command
#0-59 0-23 1-31 1-12 0-6(0=Sunday) /usr/bin/somecommand
0 */4 * * * /usr/bin/ntpdate -u GEREHIDCO004
0 5 * * * /root/backup_wikizabbix/backup_wikizabbix_daily.sh
0 18 * * 0 /root/backup_wikizabbix/backup_wikizabbix_weekly.sh
0 4 1 * * /root/backup_wikizabbix/backup_wikizabbix_monthly.sh
0 1 30 12 * /root/backup_wikizabbix/backup_wikizabbix_yearly.sh
#49 9 * * * /root/backup_wikizabbix/backup_wikizabbix_test.sh

Ich hab heute wieder eine neue Datei (29KB)

Die vom Cronjob erstellen Dateinamen warten Gestern:
ziuN7TRj
und heute
ziYl4DT1

Ich bin irgendwie verzweifelt... im kompletten Internet finde ich kein ähnliches Problem.

hendy

Anmeldungsdatum:
15. September 2007

Beiträge: 61

Na gut, dann ändere das Skript mal folgendermaßen ab (hinter jede Befehlszeile 2>> /root/backup-skript-err.log):

#!/bin/bash
mysqldump --database wikidb --add-drop-table -B > `date +%y-%m-%d`_wikidb.sql 2>> /root/backup-skript-err.log
mysqldump --database zabbix --add-drop-table -B > `date +%y-%m-%d`_zabbix.sql 2>> /root/backup-skript-err.log
zip -r /media/ferrytnas1wiki/backup/daily/`date +%y-%m-%d_%a`.zip /var/www/aswiki/ `date +%y-%m-%d`_wikidb.sql `date +%y-%m-%d`_zabbix.sql -x /media/ferrytnas1wiki/backup/daily/ 2>> /root/backup-skript-err.log
rm `date +%y-%m-%d`_wikidb.sql 2>> /root/backup-skript-err.log
rm `date +%y-%m-%d`_zabbix.sql 2>> /root/backup-skript-err.log

# Den Rest am besten erst einmal auskommentieren

Dann müsste nach einem Durchlauf eine Datei /root/backup-skript-err.log angelegt sein, die alle Fehlerausgaben der einzelnen Befehle enthält.

Was mir gerade noch auffällt: Was soll der Parameter -x /media/ferrytnas1wiki/backup/daily/ bezwecken?

Gruß,
hendy

Thoemchen

(Themenstarter)

Anmeldungsdatum:
21. Februar 2008

Beiträge: 4

Oh, das -x ist noch von ein paar Versuchen zuvor, als ich die Daten noch im selben Verzeichniss hatte, wie die backups... das -x heißt ja es soll was ausgenommen werden (hoffe ich 😉 ).
Aber zu dem Problem sollte es ja nicht führen...

Ich habe jetzt das Script mit dem 2>> Zeugs ausgeführt und siehe da

keine Errors... die Datei ist leer :\

Ich bekomme immer noch diese blöden Datein...

Hat jemand noch eine weitere Idee?

hendy

Anmeldungsdatum:
15. September 2007

Beiträge: 61

Nach Deiner letzten Antwort habe ich noch einmal ein wenig mit dem Skript herumgespielt; ich habe das Gefühl, dass zip mit symbolischen Links nicht klarkommt und dass cron Skripte nach einiger Zeit beendet... Folgende Befehle habe ich ausgeführt:

cd /tmp
mkdir data
cd data
dd if=/dev/random of=test.dat count=524288 # Erstelle eine 256MB-Datei zum Testen
ln -s . recur # Erstelle einen symbolischen Link auf das Verzeichnis
cd ..
zip -r testdata.zip data/


und dann hat zip mir ganz viele Dateien angezeigt von der Form data/recur/recur/recur/recur/recur/recur/recur/recur/recur/recur/recur/recur/recur/recur/recur/recur/recur/recur/recur/.../test.dat. Natürlich ist die zip-Datei nicht fertig geworden und hatte nach Partition-voll-Fehler einen zi***-Dateinamen.

Wenn die Testdaten kleiner sind, kann es sein, dass zip in der Konsole fertig wird (Abbruch wegen maximaler Pfadlänge), bei cron aber nicht. Daher gehe ich davon aus, dass cron auch eine maximale Ausführungszeit vorgibt, konnte aber bisher keinen weiteren Hinweis darauf finden...

Ich würde Dir empfehlen statt zip die Kombination tar/gzip einzusetzen. Dein Skript sähe also so aus:

#!/bin/bash
mysqldump --database wikidb --add-drop-table -B > `date +%y-%m-%d`_wikidb.sql
mysqldump --database zabbix --add-drop-table -B > `date +%y-%m-%d`_zabbix.sql
# tar mit Parameter z führt gzip automatisch aus; f bedeutet jetzt kommt der Ausgabedateiname, c=create
tar czf /media/ferrytnas1wiki/backup/daily/`date +%y-%m-%d_%a`.tar.gz /var/www/aswiki/ `date +%y-%m-%d`_wikidb.sql `date +%y-%m-%d`_zabbix.sql
rm `date +%y-%m-%d`_wikidb.sql
rm `date +%y-%m-%d`_zabbix.sql

# Den Rest wage ich jetzt nicht zu bestätigen ;-)

Viele Grüße,
Hendy

Edit: Was ich vergessen habe zu schreiben: Ich kenne mich mit Deinem Wiki nicht aus, aber ich nehme an, dass unter /var/www/aswiki/ irgendwo auch symbolische Links auf andere Verzeichnisse zu finden sind.

Antworten |