kanotix.com

Sonstiges - Cronjob wird nicht ausgeführt

Felis - 27.02.2014, 07:59 Uhr
Titel: Cronjob wird nicht ausgeführt
Mir fällt seit einiger Zeit auf, dass ein täglicher Cronjob (backup) als Root nicht ausführt wird. Ich habe keine Ahnung wo ich bei der Fehlersuche ansetzen müsste. System ist Dragonfire-KDE.
totschka - 27.02.2014, 09:34 Uhr
Titel:
Hat der cronjob in der Vergangenheit funktioniert oder wurde er überhaupt noch nicht ausgeführt? Falls er bisher überhaupt nicht ausgeführt wurde, kann es folgende Ursachen haben:

- das Skript in /etc/cron.daily für den Aufruf des Backups funktioniert nicht
- das Skript in /etc/cron.daily hat einen falschen Dateinamen
- das Skript in /etc/cron.daily ist nicht ausführbar

Die Dateinamen der Skripte in /etc/cron.{hourly|daily|weekly|monthly} dürfen keine Punkte enthalten.

Ob das Skript ausgeführt würde, kannst Du testen:

Code:
run-parts --test /etc/cron.daily


Das Kommando zeigt die Liste der Skripte, die täglich ausgeführt werden.


P.S.:
Ich bin davon ausgegangen, dass der Rechner auch zu der in der crontab eingetragenen Zeit in Betrieb ist. Per default wird ein Skript in /etc/cron.daily also jeden Morgen um 06.25 Uhr ausgeführt. cron holt von sich aus die verpassten Jobs nicht nach. Da passt dann anacron besser.
Felis - 27.02.2014, 10:11 Uhr
Titel:
Danke für prompte und sehr aufschlussreiche Antwort. Also, ursprünglich lief das Skript. Steht auch in crontab drinnen
Code:
root@linux:/home/am# crontab -l
#Backup
30 18 * * *     /usr/local/bin/backup


# Diese Datei wurde von KCron generiert Donnerstag, 27. Februar 2014 11:05.

wobei ich es eben neu erstellt habe, nachdem weder durch deinen Suchbefehl, noch in /etc/cron.daily das Skript zu finden war. Leider auch nach Neuerstellung wieder Fehlanzeige. Nirgendwo zu finden. Der Rechner ist um 18.30 immer an. Manuell gestartet funktioniert es übrigens. Am Skript liegt es also nicht.
totschka - 27.02.2014, 17:22 Uhr
Titel:
Ein relativ einfacher Weg wäre das Einrichten eines cronjobs, indem Du das betreffende Skript in das passende Verzeichnis /etc/cron.xxxx kopierst und verlinkst.
Zum Beispiel:
Code:
# ln -s /usr/local/bin/backup /etc/cron.daily/


Dann müsstest Du mit einem Editor die /etc/crontab bezüglich der Uhrzeit anpassen und es sollte funktionieren. Alle anderen täglich ausgeführten Jobs würden dann ebenfalls zu dieser Uhrzeit ausgeführt, was aber wohl nicht stört, da der Rechner sowieso an ist.

Warum der von Dir eingerichtete cronjob so nicht funktioniert, erschließt sich mir bisher noch nicht. Nach dem Eintrag folgt richtigerweise eine Leerzeile. Die Ausführung benutzerdefinierter cronjobs hängt auch von den Einträgen in /etc/cron.allow und /etc/cron.deny ab. Die sollten aber theoretisch nicht vorhanden sein. Außerdem ist der Nutzer root davon eh ausgenommen, weil er den Dienst uneingeschränkt nutzen darf. Deshalb bin ich gerade etwas ratlos.

Bei mir aufm Netbook läuft trim mit anacron, und das geht einfach über ein Skript in /etc/cron.weekly.
Felis - 27.02.2014, 17:56 Uhr
Titel:
den Link habe ich gesetzt, aber wo sollte ich hier die Uhrzeit anpassen?
Code:
root@linux:~# cat /etc/crontab
#Kein Kommentar
SHELL=/bin/sh

#Kein Kommentar
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

#Kein Kommentar
17 * * * *      root    cd / && run-parts --report /etc/cron.hourly

#Kein Kommentar
25 6 * * *      root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

#Kein Kommentar
47 6 * * 7      root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )

#Kein Kommentar
52 6 1 * *      root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )


# Diese Datei wurde von KCron generiert Donnerstag, 27. Februar 2014 11:05.
root@linux:~#

totschka - 27.02.2014, 18:05 Uhr
Titel:
Code:
25 6 * * *      root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )


Die Zeile ist verantwortlich für die täglichen Jobs, die in /etc/cron.daily als Skript stehen. Da brauchst Du nur die Zeit ändern, in Deinem Fall dann

Code:
30 18 * * *      root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )


Die crontab von root kannst Du dann wieder löschen:
Code:
# crontab -r



P.S.:
Die /etc/crontab enthält die globalen Einstellungen und Jobs. Es werden nacheinander entsprechend der Einträge die Skripte in

/etc/cron.hourly #stündliche Jobs
/etc/cron.daily #tägliche Jobs
/etc/cron.weekly #wöchentlich
/etc/cron.monthly #monatlich

erledigt. Für die Jobs außer den stündlichen wird geprüft, ob anacron installiert wurde und die ausführbare Datei /usr/sbin/anacron vorhanden ist. Ist das nicht der Fall, so werden die Jobs über run-parts ausgeführt.
acritox - 27.02.2014, 18:44 Uhr
Titel:
Ich vermute der Kommentar in der letzten Zeile deiner crontab ist schuld, lösch mal das raus:
Code:
# Diese Datei wurde von KCron generiert Donnerstag, 27. Februar 2014 11:05.

Zitat man crontab:
Zitat:
If the last entry in a crontab is missing the newline, cron will consider the crontab (at least partially) broken and refuse to install it.

ansonsten check mal ob cron überhaupt richtig läuft:
Code:
ps -C cron -f
grep CRON /var/log/syslog

/etc/cron.daily verwendet man normalerweise wenn es einem nur darum geht, dass etwas einfach einmal täglich ausgeführt werden soll, die Uhrzeit dabei aber egal ist (z.B. /etc/cron.daily/logrotate um einmal am Tag die Logs zu rotieren). Der Eintrag in die crontab (wie du ihn ursprünglich hattest) war schon richtig eigentlich.

acritox
Felis - 28.02.2014, 09:16 Uhr
Titel:
Code:
root@linux:~# ps -C cron -f
UID        PID  PPID  C STIME TTY          TIME CMD
root      3285     1  0 08:58 ?        00:00:00 /usr/sbin/cron

root@linux:~# grep CRON /var/log/syslog
root@linux:~#

Scheint zu laufen. Im Logfile wohl nix drinnen, da erst um 8.58 eingeschaltet?

Danke für die Tipps, werde mal sehen, wie es in den nächsten Tagen läuft und berichten.
Andreas
Felis - 01.03.2014, 18:04 Uhr
Titel:
Sieht so aus, alsob es jetzt funktionieren würde.
Code:
Feb 28 18:30:01 linux /USR/SBIN/CRON[8123]: (root) CMD (/usr/local/bin/backup)
Mar  1 18:30:01 linux /USR/SBIN/CRON[3898]: (root) CMD (/usr/local/bin/backup)

Meine "Lösung": Der Hinweis auf die vmtl. fehlerhafte Crontab, die von Kcron-KDE4 erstellt wurde, brachte mich auf die Idee es mit Kcron von KDE3.5 sprich Trinity, das ich auch drauf habe, da ich mich anfangs nicht mit KDE4 anfreunden konnte, zu versuchen. Dessen Crontab sieht jetzt so aus
Code:
root@linux:/home/am# crontab -l
# Backup
30 18 * * *     /usr/local/bin/backup
# This file was written by KCron. Copyright (c) 1999, Gary Meyer
# Although KCron supports most crontab formats, use care when editing.
# Note: Lines beginning with "#\" indicates a disabled task.
root@linux:/home/am#

Alle Zeiten sind GMT + 1 Stunde
PNphpBB2 © 2003-2007