Wie kann ich die Ergebnisse meiner Cron-Jobs anzeigen?

66

Ich sehe so viele Anleitungen, wie man Crontab ausführt, aber im Moment muss ich lernen, wie man es macht

  1. Finden Sie Protokolldateien über Cron-Jobs
  2. Konfigurieren Sie, was protokolliert wird
Zombies
quelle

Antworten:

66

Überprüfen Sie, ob die Programme, die Sie mit cron ausführen, eigene Protokolldateien haben. Wenn sie ihre Ausgabe nicht auf die Standardausgaben schreiben, können Sie diese in Dateien umleiten oder per E-Mail an Sie senden. Innerhalb von Crontabs funktioniert die Standard-Shell-Umleitung .

Um beispielsweise die Fehlerausgabe von an umzuleiten und die Standardausgabe some_job.shzu some_job.errverwerfen (dh an zu senden /dev/null), fügen Sie Ihrer crontab die folgende Umleitung hinzu

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err

oder um es dir zu schicken (falls mailverfügbar)

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" [email protected]
Benjamin Bannier
quelle
So habe ich meine Cron-Probleme immer gelöst.
Physicsmichael
Ist das zweite Beispiel richtig? Würde es nicht alles umleiten /dev/null?
Timmmm
7
@Timmmm: Ich arbeite. Es leitet zuerst alles von some_job.shstdout nach /dev/nullund erst nach stderr nach stdout um (was jetzt selbst nichts mehr enthält). Auf diese Weise gelangt nur sein stderr zu stdout und wird an weitergeleitet mail.
Benjamin Bannier
9

Die meisten Cron-Daemons auf Plattformen, mit denen ich gearbeitet habe, senden automatisch die Standard- / Standard-E-Mail der Benutzer-Cron-Jobs an den Benutzer, von dessen Cron-Registerkarte der Job stammt. Ich habe vergessen, was systemweit passiert (nicht benutzerspezifische Cron-Jobs aus / etc / crontab). Die Sache ist, dass Leute auf den meisten Unix-ähnlichen Betriebssystemen nicht mehr immer einen Mailer-Daemon (dh einen Mail Transfer Agent (MTA) wie sendmail, qmail oder postfix) einrichten. Die Cron-Job-Ausgabe-E-Mails sterben also einfach irgendwo in einem lokalen Mail-Spool-Ordner, wenn sie überhaupt so weit kommen. Eine Antwort könnte darin bestehen, Ihren Mailer-Daemon zu starten und sicherzustellen, dass Sie eine ~ / .forward-Datei haben, um Ihre lokale Mail an Ihr "echtes" E-Mail-Konto weiterzuleiten.

Wenn Sie möchten, dass Ihre Jobs in bestimmte Protokolldateien geschrieben werden, können Sie die Standardausgabeumleitung wie in @honk vorgeschlagen verwenden. Angenommen, Ihr Cron-Job ist ein Shell-Skript, haben Sie Ihren Skriptaufruf-Logger (1) oder Syslog (1) oder Unabhängig davon, welches andere Befehlszeilentool Ihr Betriebssystem zum Senden beliebiger Nachrichten an Syslog bereitstellt. Dann können Sie die in Ihrem Betriebssystem integrierten Methoden verwenden, um zu konfigurieren, welche Arten von Nachrichten wo protokolliert werden, indem Sie möglicherweise /etc/syslog.conf bearbeiten.

Die meisten meiner Cron-Jobs rufen Bash-Skripte auf, die ich speziell geschrieben habe, um aus einem bestimmten Grund von Cron gestartet zu werden. Insbesondere wenn ich sie zum ersten Mal schreibe und debugge, verwende ich gerne bashs "set -vx", um die nicht erweiterte und erweiterte Form jeder Zeile des Shell-Skripts vor der Ausführung in stdout zu schreiben. Beachten Sie, dass Shell-Skripte, die mit cron gestartet wurden, als nicht angemeldete, nicht interaktive Shells betrachtet werden, sodass Ihre Standard-Shell-Startskripte wie .bashrc und .profile nicht ausgeführt werden. Wenn Sie bash verwenden und möchten, dass bash ein Startskript ausführt, müssen Sie in Ihrer crontab vor der Zeile, in der Sie den Job definieren, eine Umgebungsvariable "BASH_ENV = / path / to / my / startup / script" definieren.

Spiff
quelle
3
Das ist richtig. Man kann den mailBefehl verwenden, um Nachrichten von der Befehlszeile aus zu lesen. Oder schauen Sie sich an /var/spool/mail. Wenn Sie jedoch Postfix oder einen anderen Mailer als Standard-Sendmail installiert haben, ist eine andere Methode zum Lesen von Nachrichten erforderlich.
Akostadinov
Warum brauchen wir dafür einen Mail-Dienstleister? mail -s "cron output" [email protected]funktioniert ganz gut: /
Martin Konecny
Unter CentOS wird meine Cron-Ausgabe an / var / spool / mail "gesendet". Sehen Sie es , indem Sie , less $MAILwenn Sie cron - Ausgang für den aktuellen Benutzer sehen wollen , oder less /var/spool/mail/rootwenn Sie wollen für Befehle cron Ausgabe sehen als root ausgeführt wird .
sffc
5

Die von cron ausgeführten Aufgaben sind für ihre eigene Protokollierung verantwortlich.

ceejayoz
quelle
2

Am einfachsten ist es, Druckfehler zu erfassen und dann in einer Datei zu speichern. Ich habe einen Cronjob, der eine PHP-Kommandozeile aufruft:

1 0 * * * php /pathOfMyApp/index.php controllerName functionName> /pathOfMyApp / log / myErrorLog 2> & 1

Der Teil vor '>' ist mein Cronjob und nach '>' das Erfassen und Speichern in einer Datei, die sich in einem Protokollordner im Stammverzeichnis meines Projekts befindet, sich aber möglicherweise an der gewünschten Stelle befindet. Seien Sie wachsam: Jedes Mal, wenn cronjob aufgerufen wird, überschreibt er das letzte Protokoll. Sie können '>>' verwenden, um am Ende einer vorhandenen Datei zu schreiben oder nach dem Terminalbefehl 'cat' zu suchen.

Wenn Ihre crontab 'curl' oder 'wget' verwendet und auf einen Link verweist, können Sie in / var / log / httpd / appName nach access-log suchen, wenn cron mit 500 oder 400 zurückkehrt, muss etwas falsch sein.

Endlich können Sie auch / var / log / messages überprüfen.

gabriel_lucius
quelle
1

Ich denke, dass das Umleiten innerhalb der Cron-Datei in diesem Fall möglicherweise nicht die beste Option ist.

Häufig soll die Protokollierungsspezifikation zusammen mit dem Cron-Job-Skript gespeichert werden. In diesem Fall schlage ich Folgendes vor:

#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>

Dadurch wird die Ausgabe des Cron-Jobs an die Datei capture-log.txt angehängt.

user239558
quelle
1

Ich möchte lieber E-Mail-Berichte über Cron-Jobs erhalten. Einfach setzen

[email protected]

In crontab und Sie erhalten eine E-Mail. Natürlich muss die E-Mail-Adresse für Ihren Account konfiguriert sein.

niemand
quelle
Ich finde, dass dies häufig das einfachste Ein- und Ausschalten zum Debuggen ist. Normalerweise benutze ich nur den Benutzernamen @ localhost für die E-Mail-Adresse.
Flickerfly