Cron führt Programm nicht richtig aus

C

clemente

Mitglied
Hallo,
ich verzweifel so langsam. Ich möchte "dirvish-runall" - ein Perlscript für rsync-backups - via cron regelmässig starten
Dazu schrieb ich folgendes in die /etc/crontab:
Code:
* * * * * root /usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dirvish-runall>>/root/dirvish
In der Datei /root/dirvish sehe ich den erwarteten Output - aber das Script führt die eigentlichen Bakcups nicht aus.
Direkt auf der Kommandozeile funktioniert /usr/local/sbin/dirvish-runall>>/root/dirvish wunderbar.
/var/log/messages zeigt nichts anormales:
Code:
root@enthal1 : /usr/local/sbin : 21:11
>!tail -n15
tail /var/log/messages  -n15
May 10 21:00:01 enthal1 /usr/sbin/cron[9178]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dirvish-runall>>/root/dirvish)
May 10 21:00:13 enthal1 syslog-ng[2850]: STATS: dropped 0
May 10 21:00:15 enthal1 /usr/sbin/cron[9223]: (CRON) STARTUP (V5.0)
May 10 21:01:01 enthal1 /usr/sbin/cron[9236]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dodirvish>>/root/dirvish)
May 10 21:02:01 enthal1 /usr/sbin/cron[9247]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dodirvish>>/root/dirvish)
May 10 21:03:01 enthal1 /usr/sbin/cron[9259]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dodirvish>>/root/dirvish)
May 10 21:04:01 enthal1 /usr/sbin/cron[9277]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dodirvish>>/root/dirvish)
May 10 21:05:01 enthal1 /usr/sbin/cron[9295]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dodirvish>>/root/dirvish)
May 10 21:05:01 enthal1 /usr/sbin/cron[9223]: (*system*) RELOAD (/etc/crontab)
May 10 21:06:01 enthal1 /usr/sbin/cron[9301]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dirvish-runall>>/root/dirvish)
May 10 21:07:01 enthal1 /usr/sbin/cron[9307]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dirvish-runall>>/root/dirvish)
May 10 21:08:01 enthal1 /usr/sbin/cron[9313]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dirvish-runall>>/root/dirvish)
May 10 21:09:01 enthal1 /usr/sbin/cron[9319]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dirvish-runall>>/root/dirvish)
May 10 21:10:01 enthal1 /usr/sbin/cron[9327]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dirvish-runall>>/root/dirvish)
May 10 21:11:01 enthal1 /usr/sbin/cron[9333]: (root) CMD ( ^I/usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dirvish-runall>>/root/dirvish)

root@enthal1 : /usr/local/sbin : 21:11
>
Und ich stehe dumm daneben.
Hat jemand eine Idee, was hier passiert?

Danke!!
Clemente

P.S: Die "dodirvish" Aufrufe in dem Snippet waren ein Versuch, das Perlscript über ein weiteres Bashscript auszuführen...
Gleiches Ergebnis.
 
Hallo

Hast du in der crontab den Pfad festgelegt?
Unter Umständen solltest du auch den Pfad zum Perlinterpreter prüfen.
Ausführungsrechte sind auch alle gesetzt?
Meist geht es um die Pfade, die ja in einem Script nicht aus der Umgebung der shell gelesen werden, wenn dieses nicht aus einer Shell sondern per cron gestartet wird.

Gruß Wolfgang
 
Hallo Wolfgang,
Du hast recht und es kann ja so leicht sein.
Das Script liegt in /usr/local/sbin - und es scheint weitere Skripte von dort zu verwenden. Unglücklicherweise war /usr/local/sbin aber nicht im Suchpfad von Cron eingetragen...
Danke Dir für den Denkanstoss - und ich schreibe jetzt nicht, wie viel Zeit ich für diese Geschichte verplempert habe. ;) und :(

Clemente
 
du hast sie nicht verplempert, du hast einfach was dazugelernt. ist doch ok :-)
 
hallo!


ich hatte das gleiche problem. jetzt funktioniert es auch. allerdings tritt jetzt bei mir beim erstellen des backups ein fehler auf (der vorher beim aufruf über die shell nicht auftrat.

in der mail die cron schickt steht:
Code:
dirvish error: branch /backup/zmshare:default image 20060531-23:01 failed

und in der datei summary im backup-verzeichnis steht:
Code:
Status:  (255) --


hat jemand zufällig eine idee, woran das liegen könnte?
 
Kannst Du noch die entsprechende crontab posten?
Clemente
 
Hier die Benutzer-crontab von root:
Code:
SHELL=/bin/sh

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin

MAILTO=root

#
#minute hour    mday    month   wday    command
#
#
# Automatische Backups mit dirvish
00      19      *       *       *       touch /tmp/backuplaeuft ; /usr/local/sbin/dirvish-expire --quiet ; /usr/local/sbin/dirvish-runall --quiet ; rm -R /tmp/backuplaeuft
#
# Server nach dem Backup und, nachdem alle Rechner offline sind, herunterfahren
#*/10   20,21,22,23,0,1,2,3,4 * * * *   /usr/local/bin/shutdownscript >> /var/log/shutdownlog 2>&1

Das shutdownscript fährt den Rechner automatisch herunter, nachdem bestimmte Rechner offline sind und nachdem das Backup abgeschlossen ist (wird daran erkannt, dass dann die Datei "backuplaeuft", die vor dem Backup erstellt wurde, nicht mehr vorhanden ist). Das läuft auch soweit, ist hier aber gerade ja deaktiviert.
 
Komisch. Du sagst, per Kommandozeile und als root laufen die folgenden Aufrufe fehlerfrei durch?
Code:
/usr/local/sbin/dirvish-expire;
/usr/local/sbin/dirvish-runall;
Laut dirvish bedeutet exit code 255: usage error.
Die Fehlermeldung wird im dirvish script relativ weit am Ende ausgegeben (bei meiner Version in Zeile 798 ). Davor sollte im Fehlerfall eigentlich einiges an output kommen.
Wenn der dirvish Aufuf per Kommandozeile keinen Fehler bringt, versuche doch einmal die Ausgabe aus dem cron Aufruf in eine Datei umzuleiten. Vielleicht bringt das ja eine Spur.
 
Komisch. Du sagst, per Kommandozeile und als root laufen die folgenden Aufrufe fehlerfrei durch?
ja, wenn ich als root den befehl aus der kommandozeile heraus starte, kommt kein fehler. wenn der befehl allerdings durch cron aus der benutzer-crontab von root heraus gestartet wird, taucht eben dieser fehler auf.

also ich habe jetzt mal folgenden aufruf gestartet:
Code:
10      16      *       *       *       /usr/local/sbin/dirvish-expire >> /var/log/dirvishexlog ; /usr/local/sbin/dirvish-runall >> /var/log/dirvishrunalllog
das müsste doch richtig sein, oder?

in der datei dirvishexlog steht nichts und in der datei dirvishrunalllog nur folgendes:
Code:
16:10:00 dirvish --vault zmshare
16:10:00 done

was mir noch aufgefallen ist, ist, dass die rechte von dem neuen backup-ordner folgendermaßen gesetzt sind, wenn ich das backup aus der kommandozeile heraus starte:
Code:
drwxr-xr-x   3 root  wheel  512 May 31 22:54 20060531-22:54

bei dem aufruf mit cron:
Code:
drwx------   3 root  wheel  512 May 31 23:01 20060531-23:01

aber das dürfte ja eigentlich nichts damit zu tun haben, oder?


--

edit: Hat denn da keiner eine Lösung für mein Problem??? Komme hier leider überhaupt nicht weiter... :(
 
Zuletzt bearbeitet:
Hi,

der Thread ist zwar schon etwas älter, aber ich habe ähnliche bzw. gleiche Probleme mit dem Aufruf des Cron-Skripts....

Hier mein Cron-Skript, welches in /etc/cron.d mit den Rechten 777 liegt:
Code:
SHELL=/bin/sh
MAILTO=root
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/local:/usr/local/bin
1 2 * * * root /usr/local/bin/dirvish-expire --quiet ; /usr/local/bin/dirvish-runall>>/backup/dirvish.log

Leider passiert gar nix.... keine Fehlerausgabe, einfach gar nix... nicht in /var/log/messages und auch nicht in /var/log/cron

Wenn ich aber mit Webmin auf Cron gehe, dieses Skript anzeigen lasse und "Jetzt ausführen" auswähle, läuft alles fehlerfrei durch. :think:

Ich checks einfach nicht...

Danke und Ciao,
Huaba
 
Hi,
das ganze sollte also jeden tag um 2 Uhr 1 morgens geschehen. Und nach diesem Termin findest Du noch nicht einmal eine Nachricht im Syslog, dass Cron das Script ausgeführt hat?
Hm. Ich glaube, nach Änderung der Crontab muß Cron via /etc/init.d/cron reload (o.ä.) übder die Änderungen "informiert" werden. Hast Du das getan?
 
Hab ich gerade gemacht, mal schauen, obs jetzt geht.
Komisch ist nur, das Webmin unter Cron den Job listet...
 
Zuletzt bearbeitet von einem Moderator:
Hallo

Wenn du das gleich mit crontab -e machst, kannst du dir das sparen. ;)
Sämtliche Ausgaben der via cron laufenden Scripte landen übrigens in der eingestellten Mailbox. ->wenn sie nicht extra umgeleitet wurden.

Gruß Wolfgang
 
Ich weiß, das die Meldungen in der Mailbox landen. Aber da kommt nix. Auch die cron-Logs zeigen nix an....
 
Hallo zusammen,
meine Probleme mit cron gestalten sich ähnlich. Ich habe eine Datei backup.sh angelegt, ihr ausführen Rechte gegeben und diese Datei in crontab -e eingetragen (00 23 * * * /home/david/backup.sh). Das Alles hat bis SuSE 8.2 so auch funktioniert. Ab SuSE 9.x kam dan das Problem, dass cronjobs nur noch als unpriviligierter Benutzer ausgeführt wurde und beim Benutzer root einfach gar nichts mehr passiert ist. Ab SuSE 10.0 wird cron einfach gar nicht mehr ausgeführt. Der einzige Eintrag, der überhaupt erscheint ist in /var/log/messages und lautet: /usr/sbin/cron[5344]: [root] RELOAD (tabs/root).
Sachdienliche Hinweise wären Gold wert.
 
Bei mir gehts jetzt, hab das Skript einfach von /etc/cron.d in /etc/cron.daily verschoben, jetzt tut es :bounce:
 

Ähnliche Themen

Crontab und Scripts - Problem

X startet nichtmehr

Adressvergabe in anderen Subnets

Shellskript - Fehler in Cron

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Zurück
Oben