Cronjob läuft einfach nicht

lordg2009

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.559
Hi,

ich möchte ein selbsterstelletes bash schript als root als cronjob laufen lassen.

Das lief immer recht gut, indem ich die Zeilen in /etc/crontab hinzugefügt habe. Jetzt habe ich das System neu aufgespielt und debian 7 installiert. Die alte crontab habe ich wieder rüberkopiert, aber das bash script wird nicht mehr ausgeführt.

Ich habe alles versucht:
  • Das Bash script läuft bei manuellen Start einwandfrei
  • Eintrag in /etc/crontab klappt nicht
  • Eigene Datei in /etc/cron.d/ (mit Maske 0644) klappt nicht
  • cronjob per crontab -e klappt auch nicht

Habe /var/log/syslog durchforstet.
Nur die cron.hourly Zeile aus crontab wird aufgerufen

Meine Zeile lautet:
*/5 * * * * root /usr/local/sbin/MEINSCRIPT.sh

Hat noch jemand ne Idee?
 
Zuletzt bearbeitet:
Jep,

crontab -l hat es danach auch ausgegeben

Habe auch mittels service cron restart cron neugestartet, auch wenn ich glaube, dass das gar nicht notwendig ist. Klappt trotzdem nicht.
 
leg mal dein script unter /root ordner
und probier mal ohne "root" im cron

*/5 * * * * /root/MEINSCRIPT.sh
 
Klappt leider nicht.

Eine Zeile ohne Benutzer ist in der crontab, oder in cron.d, usw nicht zulässig und erzeugt eine Fehlermeldung im syslog.

Der Eintrag in crontab -e erzeugt zwar keinen Fehler, führt aber auch das script nicht aus :(
 
tust du dich als root einlogen ?

Ich hab auch Debian 7.5 an 2 Server dritte ist immer noch beim 6.0.9
alle cronjobs laufen ohne Benutzername ... keine Fehler im Syslog
 
Zuletzt bearbeitet:
Ist dein Script ausführbar chmod +x (0744)
hmmmm
 
Zuletzt bearbeitet:
Ja, na klar 0744

/usr/local/sbin ist ja auch Teil der PATH Variable.

Ich kann es jederzeit per MEINSCRIPT.sh von der Konsole aus starten
oder natürlich per /usr/local/sbin/MEINSCRIPT.sh

Das Problem muss tiefer liegen.

der cron daemon schreibt ja eigentlich jede Ausführung in den syslog.
Der stündliche cron.hourly wird auch immer ausgeführt, aber meine Zeile führt er nicht aus, gar nicht, es gibt auch keine Fehlermeldung.

Hier noch mal die Zeile kopiert, um dumme Fehler auszuschließen
*/5 * * * * root /usr/local/sbin/MEINSCRIPT.sh

Auch ein Neustart und das damit komplette neuladen aller Dienste hat keinen Erfolg gezeigt.
 
Zuletzt bearbeitet:
Probier mal cron autoremove und noch mal installieren
Ok das ich nicht normal :D und mir fällt nichts mehr ein
 
Zuletzt bearbeitet:
Kann es sein dass du ein * zu viel hast

Probier mal so

*/5 * * * root /usr/local/sbin/MEINSCRIPT.sh
bzw.
*/5 * * * /usr/local/sbin/MEINSCRIPT.sh


Noeeeee
 
Zuletzt bearbeitet:
Naja, es sind 5 Zeitangaben

Bei Angabe einer Periode muss das Sternchen mit rein, also
*/5 => Aller 5 Minuten
* * * * => Jede Stunde, Jeden Tag, Jeden Monat, Jede Woche
 
lordg2009 schrieb:
Jep,

crontab -l hat es danach auch ausgegeben
"crontab -l" zeigt die persönliche crontab des aktuellen Nutzers, also in deinem Fall von root. Diese wird in /var/spool/cron/crontabs/root gespeichert. Es handelt sich also NICHT um die systemweite in /etc/crontab + /etc/cron.d/*

Ausschließlich in der systemweiten crontab muß das Feld mit dem Benutzernamen auftauchen. Deine in Beitrag #1 stehenden crontab-Zeile mit Nutzernamen drin ("root" in dem Fall) darf in dieser Form nicht in Nutzer-Crontabs auftauchen, die "crontab -l" anzeigt. Kontrolliere also erstmal, ob du das richtige Fileformat je nach gewählter crontab verwendest. Es gibt also 2 Formate.

Existiert bei dir /etc/cron.allow oder /etc/cron.deny? Hast du dir mal "man 1 crontab" und "man 8 cron" durchgelesen? /etc/default/cron verändert? Cron kann prima loggen was er genau tut. Man muß es ihm nur sagen.
 
Zuletzt bearbeitet:
Ne, das mit dem Benutzer habe ich jetzt schon verstanden.
Ich nutze die Systemweite Crontab.

Mit dem Tip */5 zu ersetzen, klappt jetzt auch ein Teil.
der syslog zeigt ein regelmäßiges Ausführen des Skriptes aller 5 Minuten an. Trotzdem passiert nichts. Das Script, dass normalerweise einen scan in meinem lokalen Netzwerk durchführt und Ergebnisse in eine DB schreiben soll, tut dies nur, wenn es manuell von der Konsole aufgerufen wird.
 
Lass doch mal ein Logfile vom Cron Schreiben:

*/5 * * * * root /usr/local/sbin/MEINSCRIPT.sh 1>/tmp/MEINSCRIPT.sh.log 2>/tmp/MEINSCRIPT.sh.err
 
Ahhhh, jetzt wirds interessant

4 Fehler wurden gefunden

Code:
/usr/local/sbin/maclogger.sh: 35: [: 141.76.119.0: unexpected operator
In der Zeile steht ein ganz normales
Code:
if [ $IPRANGE == $var ]

Code:
/usr/local/sbin/maclogger.sh: 50: /usr/local/sbin/maclogger.sh: let: not found
Das ist der let Befehl zum Rechnen, den er hier nicht nehmen möchte
Code:
let IDNEW++

Code:
ERROR 1050 (42S01) at line 4: Table 'id2' already exists
Ein SQL Befehl, der fehlgeschlagen ist, spielt wohl aber keine größere Rolle, da die Tabelle nur angelegt werden sollte, wenn sie noch nicht da ist und hier die Überprüfung fehlt

Code:
/usr/local/sbin/maclogger.sh: 87: /usr/local/sbin/maclogger.sh: let: not found
Noch mal der Fehler mit dem let Befehl, den es hier anscheinend nicht will
 
BTW:
Scheint ein System ohne lokalen, funktionierenden Maildienst zu sein. Klassischerweise schickt Cron eine Mail an den Nutzer, wenn sein Cronjob Output (=Fehler) produziert. Die Umleitung in Files, die Sannyboy111985 vorschlägt, stellt also einen Ersatz für einen normalerweise sowieso vorhandenen Mechanismus zur Benachrichtigung über Fehler von cron dar.
 
Zurück
Oben