Wie kann ich die Ergebnisse meiner Cron-Jobs anzeigen?


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" you@example.org

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.


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" test@example.comfunktioniert 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.


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.


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.


1

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

MAILTO=yourmail@domain.com

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.