Ü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
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.
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.
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.
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.
Antworten:
Ü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.sh
zusome_job.err
verwerfen (dh an zu senden/dev/null
), fügen Sie Ihrer crontab die folgende Umleitung hinzuoder um es dir zu schicken (falls
mail
verfügbar)quelle
/dev/null
?some_job.sh
stdout nach/dev/null
und 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 weitergeleitetmail
.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.
quelle
mail
Befehl 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.mail -s "cron output" [email protected]
funktioniert ganz gut: /less $MAIL
wenn Sie cron - Ausgang für den aktuellen Benutzer sehen wollen , oderless /var/spool/mail/root
wenn Sie wollen für Befehle cron Ausgabe sehen als root ausgeführt wird .Die von cron ausgeführten Aufgaben sind für ihre eigene Protokollierung verantwortlich.
quelle
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.
quelle
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:
Dadurch wird die Ausgabe des Cron-Jobs an die Datei capture-log.txt angehängt.
quelle
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.
quelle