Page 1 of 1
Cron Job funktioniert nicht
Posted: 2010-09-08 09:20
by native
Ich habe ein Shell-Skript geschrieben, um ein MySQL Backup auf einem Server zu machen. Rufe ich das Skript manuell auf, funktioniert es so, wie es soll.
Ich habe daraufhin folgenden Cronjob eingerichtet:
Code: Select all
13 * * * * /root/backup/mysqlBackup.sh
Laut syslog scheint der auch ausgeführt zu werden:
Code: Select all
Sep 8 08:13:01 h1693157 /USR/SBIN/CRON[4965]: (root) CMD (/root/backup/mysqlBackup.sh)
Allerdings wird das Backup nicht erstellt, es scheint schlicht nichts zu passieren. Weitere Hinweise konnte ich in den Logfiles nicht finden. (Ja, die Datei ist ausführbar)
Hier das ganze Skript:
http://pastebin.com/iE362DkU
Jmd Tipps, wo der Fehler liegen könnte?
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 09:45
by Roger Wilco
Du verwendest die Programme in deinem Skript ohne korrekte (d. h. vollstaendige) Pfadangabe. Das Environment ist bei der Ausfuehrung via cron i. d. R. nicht komplett.
Ausserdem pruefst du keinerlei Rueckgabewerte der aufgerufenen Programme. Was machst du im Fehlerfall?
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 10:13
by native
Wo verwende ich keine vollständigen Pfade? Es gibt nur 2 Pfadangaben, und die sind beide absolut.
BZgl. Rückgabewerte: Shellskripting ist komplett neu für mich, für entsprechende Tipps, wie das gemacht wird, wäre ich dankbar.
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 11:20
by native
Ich habe das Skript entsprechend geändert:
http://pastebin.com/h8nzys3g
Allerdings immer noch das gleiche Problem.
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 11:32
by Joe User
Du hast "date" und "curlftpfs" vergessen.
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 12:14
by native
Und immer noch gleiches Problem:
http://pastebin.com/e7TxPnUX
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 12:58
by Roger Wilco
Du solltest dir dein if conditional nochmal genau ansehen. Die Lektuere von `man bash` (Abschnitt "Shell Builtin Commands") hilft dir sicherlich dabei.
Ausserdem waere es fuer das Debugging hilfreich, wenn du `set -x` in dein Skript packst und dir die Ausgabe via E-Mail zustellen laesst.
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 13:03
by Joe User
In welcher Crontab steht der Cron?
Rückgabewerte:
http://tldp.org/LDP/abs/html/exit-status.html
Generell sehr lesenswert:
http://tldp.org/LDP/abs/html/
Unabhängig von diesem Problem solltest Du Dir mal
http://www.rootforum.org/forum/viewtopi ... 67#p302387 durchlesen und Dein MySQL-Backup bei laufendem MySQLd mittels tar überdenken.
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 13:08
by native
Tut mir leid, ich seh den Fehler nicht, und verstehe auch den Zusammenhang zu built in commands nicht. Zumal es ja per manuellem Aufruf funktioniert.
Kannst Du mir das genau erklären?
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 13:18
by native
Habe den Cron mit crontab -e erstellt. skript kopieren in cron.hourly brachte den gleichen Fehler.
Was wäre die Alternative zu tar? mysqldump?
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 15:21
by Joe User
native wrote:Habe den Cron mit crontab -e erstellt. skript kopieren in cron.hourly brachte den gleichen Fehler.
Ich wollte nur sicherstellen, dass es nicht an einer fehlenden Benutzerangabe im Crontab liegt.
native wrote:Was wäre die Alternative zu tar? mysqldump?
Ja, zum Beispiel. Weitere Alternativen hat isotopp recht ausführlich in obigem Link erklärt. Dein tar fällt gerne auf die Schnauze sobald gleichzeitig in den Datenbanken oder den MySQL-Logs geschrieben wird. Da Du in Deinem Script keine Fehlerprüfung (exit code) eingebaut hast, bekommst Du dann davon auch nix mit und wunderst Dich irgendwann über fehlende Backups. Grundsätzlich gilt daher, den schreibenden Zugriff während des Backup zu unterbinden (zum Beispiel per LOCK TABLES) und danach wieder freizugeben.
Eine Möglichkeit per mysqldump (siehe Doku wegen der Optionen):
Code: Select all
mysqldump --flush-logs --master-data --lock-all-tables --delete-master-logs --all-databases -uroot -p > /tmp/mysqldump.sql
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 16:02
by daemotron
Code: Select all
DAY=$(/bin/date +"%a")
...
if [ $DAY == "Mo" ]
Dein Cron läuft normalerweise mit der locale "C". Ich glaube nicht, dass mit der ein
auch "Mo" auswirft... Ob das If-Statement bei der Bash so darf, weiß ich nicht - POSIX/Bourne-kompatibel ist es jedenfalls nicht.
So sollte es hingegen funktionieren:
Code: Select all
#!/bin/sh
DAY=$(/bin/date '+%u')
HOUR=$(/bin/date '+%H')
if [ "$DAY" -eq "1" -a "$HOUR" -eq "0" ]; then
....
fi
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 19:11
by native
wirft auf diesem Server tatsächlich "Mo" aus, zumindest auf der Konsole.
Re: Cron Job funktioniert nicht
Posted: 2010-09-08 19:17
by daemotron
Ja, solange Du es auf der Konsole ausführst. Lass es mal von einem Cronjob ausführen und in eine Datei speichern.