Cron Job funktioniert nicht

Bash, Shell, PHP, Python, Perl, CGI
native
Posts: 119
Joined: 2003-11-18 10:38

Cron Job funktioniert nicht

Post 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?
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53

Re: Cron Job funktioniert nicht

Post 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?
native
Posts: 119
Joined: 2003-11-18 10:38

Re: Cron Job funktioniert nicht

Post 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.
native
Posts: 119
Joined: 2003-11-18 10:38

Re: Cron Job funktioniert nicht

Post by native »

Ich habe das Skript entsprechend geändert: http://pastebin.com/h8nzys3g

Allerdings immer noch das gleiche Problem.
User avatar
Joe User
Project Manager
Project Manager
Posts: 11173
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Cron Job funktioniert nicht

Post by Joe User »

Du hast "date" und "curlftpfs" vergessen.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
native
Posts: 119
Joined: 2003-11-18 10:38

Re: Cron Job funktioniert nicht

Post by native »

Und immer noch gleiches Problem: http://pastebin.com/e7TxPnUX
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53

Re: Cron Job funktioniert nicht

Post 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.
Last edited by Roger Wilco on 2010-09-08 12:58, edited 1 time in total.
User avatar
Joe User
Project Manager
Project Manager
Posts: 11173
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Cron Job funktioniert nicht

Post 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.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
native
Posts: 119
Joined: 2003-11-18 10:38

Re: Cron Job funktioniert nicht

Post 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?
native
Posts: 119
Joined: 2003-11-18 10:38

Re: Cron Job funktioniert nicht

Post 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?
User avatar
Joe User
Project Manager
Project Manager
Posts: 11173
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Cron Job funktioniert nicht

Post 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
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
User avatar
daemotron
Administrator
Administrator
Posts: 2639
Joined: 2004-01-21 17:44

Re: Cron Job funktioniert nicht

Post 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

Code: Select all

date '+%a'
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
Last edited by daemotron on 2010-09-08 16:03, edited 1 time in total.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time
native
Posts: 119
Joined: 2003-11-18 10:38

Re: Cron Job funktioniert nicht

Post by native »

Code: Select all

date '+%a'
wirft auf diesem Server tatsächlich "Mo" aus, zumindest auf der Konsole.
Last edited by native on 2010-09-08 19:16, edited 1 time in total.
User avatar
daemotron
Administrator
Administrator
Posts: 2639
Joined: 2004-01-21 17:44

Re: Cron Job funktioniert nicht

Post by daemotron »

Ja, solange Du es auf der Konsole ausführst. Lass es mal von einem Cronjob ausführen und in eine Datei speichern.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time