it-swarm.com.de

Warum hat mein Crontab nicht ausgelöst?

Ich benutzte crontab -e, um meiner crontab folgende Zeile hinzuzufügen:

* * * * * echo hi >> /home/myusername/test

Ich sehe jedoch nicht, dass in die Testdatei geschrieben wurde. Ist dies ein Berechtigungsproblem oder funktioniert crontab nicht richtig?

Ich sehe, dass der Cron-Prozess läuft. Wie kann ich das debuggen?

Bearbeiten - Ubuntu fragen hat eine nette Frage zu crontab , leider hilft mir das immer noch nicht.

Edit 2 - Hmm, meine Testdatei scheint 214 Zeilen zu haben, was bedeutet, dass sie in den letzten 214 Minuten in jede Minute geschrieben wurde. Ich bin nicht sicher, was das Problem war, aber es ist offensichtlich weg.

29
ripper234

Es gibt Implementierungen von cron (nicht alle, und ich weiß nicht mehr, welche, aber ich bin unter Linux auf eine gestoßen), die jede Minute auf aktualisierte Crontab-Dateien prüfen und nicht berücksichtigen neue Einträge bis zur nächsten Minute. Daher kann es bis zu zwei Minuten dauern, bis ein Crontab zum ersten Mal gestartet wird. Dies ist möglicherweise das, was Sie beobachtet haben.

Haben Sie ein leere Zeile nach Ihrem Cronjob hinzugefügt?

28
gelraen

Ich hatte das gleiche Problem - eine funktionierende Crontab hörte plötzlich auf, nachdem ich am Ende einen neuen Eintrag hinzugefügt hatte. Es stellte sich heraus, dass ich vergessen hatte, nach dieser letzten Zeile eine neue Zeile einzufügen.

Ich fand es heraus, indem ich den Befehl erteilte

cat /var/log/syslog | grep crontab

und die Ausgabe zeigte das Problem:

Jul  2 08:16:01 shiva cron[1254]: (*system*) RELOAD (/etc/crontab)
Jul  2 08:16:01 shiva cron[1254]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)

Durch Hinzufügen der neuen Zeile und Speichern wurde das Problem behoben.

10
uniomni

Klingt so, als wäre das behoben. Versuchen Sie beim nächsten Mal auch, den STDERR zu protokollieren. Folgendes wird nur bei STDOUT protokolliert, nicht bei STDERR:

* * * * * echo hi >> /home/myusername/test

Stellen Sie sicher, dass es auch für STDERR eine explizite Klausel gibt. Andernfalls wird STDERR möglicherweise per E-Mail an den Benutzer gesendet (vorausgesetzt, die E-Mail funktioniert) oder kann je nach Konfiguration von Cron nirgendwo hingehen.

* * * * * echo hi >> /home/myusername/test 2> /home/myusername/test.stderr

Meine Präferenz ist es, eine Cronjob-Ausgabe an Syslog zu senden. Auf diese Weise nutze ich jede vorhandene Syslog-Infrastruktur (zentralisierte Syslogs, Splunk, bereits unterstützte Protokollrotation, es ist einfach, Nachrichten in/var/log/messages &/var/log/cronjob usw. zu vergleichen), und das bin ich nicht Spam die Sysadmins (ich) mit unnötigen E-Mails.

* * * * * echo hi >> /home/myusername/test 2>&1 | /usr/bin/logger -t mycronjob
5

Bei mir war das Problem, dass das Skript nicht ausführbar war. Ich hatte crontab -e so eingerichtet

* * * * * /bin/my-script.sh

Und die Datei Myscript war nicht ausführbar, also lief ich

chmod +x my-script.sh

Sofort sah ich die Ausgabe wie erwartet.

2
santiago arizti

Ich würde vermuten, dass ein Grund dafür sein könnte, dass das Verzeichnis/home/verschlüsselt ist und wenn der Benutzer abgemeldet ist, cron nichts in diesem Verzeichnis tun kann.

siehe: https://stackoverflow.com/a/40354269/1279002

1
theINtoy

Ihre Cron-Linie funktioniert auf meinem Computer einwandfrei, wenn ich myusernae in phunehehe ändere. Es gibt verschiedene Möglichkeiten, um herauszufinden, was mit Ihrem System nicht stimmt.

Cron sendet normalerweise E-Mails an den Benutzer, wenn etwas nicht stimmt. Wenn die Meldung "Sie haben E-Mail" angezeigt wird, verwenden Sie einen E-Mail-Client, um überprüfen Sie Ihren Posteingang . Oder überprüfen Sie in Ihrem Home-Verzeichnis, ob möglicherweise eine Datei mit dem Namen dead.letter Dort.

Du kannst nachschauen /var/log/ für Einträge in Bezug auf cron. Auf meinem Computer befindet sich die Protokolldatei bei /var/log/cron/current (erfordert Root-Zugriff).

Wenn Sie Root-Zugriff haben, können Sie den Cron-Daemon stoppen und im Debug-Modus starten. Zum Beispiel würde ich verwenden (fcron in den Namen Ihres Daemons ändern):

killall fcron
fcron --foreground --debug
1
phunehehe

Wenn cron ausfällt, wird höchstwahrscheinlich eine E-Mail an die Benutzer-ID des cron-Jobs auf diesem Computer generiert. Wenn auf Ihrem Computer kein MTA funktioniert oder Sie diese E-Mail nicht an einer anderen Stelle lesen oder weiterleiten, wird diese Nachricht nicht angezeigt, selbst wenn der MTA funktioniert.

Eine gute Möglichkeit, die Fehler Ihres Crontab per E-Mail zu erhalten, besteht darin, Ihr Crontab folgendermaßen aussehen zu lassen:

MAILTO="[email protected]"
* * * * * echo hi >> /home/myusernae/test

Verwenden Sie natürlich Ihre E-Mail-Adresse anstelle von [email protected] Dadurch wird cron angewiesen, Fehler an Ihre E-Mail-Adresse und nicht an das lokale Konto zu senden. Dies ist insbesondere dann nützlich, wenn Sie eine Root-Crontab (oder ein Crontab-Fragment in /etc/cron.d) haben, die Sie nur an Sie senden möchten. Sie können vermeiden, dass das Postfach des Roots oder die Weiterleitungsadresse des Roots spammt.

1
jsbillings