Ich möchte wissen, wie ich genau sehen kann, was die Cron-Jobs bei jeder Ausführung tun. Wo befinden sich die Protokolldateien? Oder kann ich die Ausgabe an meine E-Mail senden? Ich habe die E-Mail-Adresse festgelegt, um das Protokoll zu senden, wenn der Cron-Job ausgeführt wird, aber ich habe noch nichts erhalten.
218
Antworten:
protokolliert alle Ausgaben des Cron-Jobs in /var/log/myjob.log
Sie können verwenden
mail
, um E-Mails zu senden. Die meisten Systeme senden nicht behandelte Jobausgabencron
per E-Mail an root oder den entsprechenden Benutzer.quelle
2>&1
: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21stderr
undstdout
im Protokoll wollen,2>&1
muss das nach der Indirektion kommen:myjob.sh >> /var/log/myjob.log 2>&1
YYYY-MM-DD_hh-mm-sec
ich einen Namen in die Ausgabedatei ein, damit jeder Dateiname anders ist und ohne Umschreiben beibehalten wird?date +\%Y\%m\%d\%H\%M\%S
-cron.log 2> & 1Standardmäßig protokolliert cron in / var / log / syslog, sodass Sie cronbezogene Einträge anzeigen können, indem Sie Folgendes verwenden:
/ubuntu/56683/where-is-the-cron-crontab-log
quelle
journalctl | grep cron
auf systemd-Systemen/var/log/cron
unter AWS Linux AMI.sudo journalctl -u cron
cron
protokolliert wird, ist sehr systemabhängig. Es gibt eine separate Antwort mit Details dazu, wie verschiedene Protokollierungsziele auf Linux-Systemen (oder genauer gesagt auf Systemen, die diese verwendensyslog
) konfiguriert sind . Andere Systeme haben möglicherweise eine andere Möglichkeit, diese Dinge zu konfigurieren.Hier ist mein Code:
quelle
>>
Hängt an und2>&1
sagt, dass der Standardfehler an dieselbe Stelle wie die Standardausgabe gesendet werden soll.Es gibt mindestens drei verschiedene Arten der Protokollierung:
Die Protokollierung VOR der Ausführung des Programms wird nur protokolliert, wenn der Cronjob versucht hat, den Befehl auszuführen. Dieser befindet sich in / var / log / syslog, wie bereits von @Matthew Lock erwähnt.
Die Protokollierung von Fehlern NACH dem Versuch des Programms, ausgeführt zu werden, kann an eine E-Mail oder an eine Datei gesendet werden, wie von @Spliffster erwähnt. Ich bevorzuge die Protokollierung in einer Datei, da Sie mit E-Mail DANN eine NEUE Problemquelle haben und prüfen, ob das Senden und Empfangen von E-Mails einwandfrei funktioniert. Manchmal ist es das, manchmal nicht. In einem einfachen allgemeinen Desktop-Computer, auf dem Sie kein SMTP konfigurieren möchten, ziehen Sie es manchmal vor, sich in einer Datei anzumelden:
Es gibt einige häufige Ursachen für Probleme mit Cronjobs: * Der ABSOLUTE PFAD der auszuführenden Binärdatei. Wenn Sie es von Ihrer Shell aus ausführen, funktioniert es möglicherweise, aber der Cron-Prozess scheint eine andere Umgebung zu verwenden, und daher werden Binärdateien nicht immer gefunden, wenn Sie nicht den absoluten Pfad verwenden. * Die von einer Binärdatei verwendeten BIBLIOTHEKEN. Es ist mehr oder weniger der gleiche vorherige Punkt, aber stellen Sie sicher, dass, wenn Sie einfach den NAMEN des Befehls eingeben, genau auf die Binärdatei verwiesen wird, die dieselbe Bibliothek verwendet, oder überprüfen Sie besser, ob die Binärdatei, auf die Sie sich beziehen, den absoluten Pfad aufweist ist das gleiche, auf das Sie verweisen, wenn Sie die Konsole direkt verwenden. Die Binärdateien können mit dem Befehl find gefunden werden, zum Beispiel:
Stellen Sie sicher, dass die Binärdatei, auf die Sie verweisen, mit der Binärdatei übereinstimmt, die Sie in Ihrer Shell aufrufen, oder testen Sie sie einfach erneut in Ihrer Shell unter Verwendung des absoluten Pfads, den Sie in den Cronjob einfügen möchten.
quelle
Unter Ubuntu können Sie eine
cron.log
Datei aktivieren , die nur die CRON-Einträge enthält.Kommentieren Sie die
cron
in der/etc/rsyslog.d/50-default.conf
Datei erwähnte Zeile aus :Speichern und schließen Sie die Datei und starten Sie den
rsyslog
Dienst neu:Sie können jetzt Cron-Protokolleinträge in einer eigenen Datei anzeigen:
Beispielausgaben:
Es werden jedoch keine weiteren Informationen darüber angezeigt, welche Skripte tatsächlich in
/etc/cron.daily
oder ausgeführt wurden/etc/cron.hourly
, es sei denn, diese Skripte leiten die Ausgabe direkt an cron.log (oder möglicherweise an eine andere Protokolldatei).Wenn Sie überprüfen möchten, ob eine Crontab ausgeführt wird und nicht in
cron.log
oder danach suchen müssensyslog
, erstellen Sie eine Crontab, die die Ausgabe in eine Protokolldatei Ihrer Wahl umleitet.Schritte von: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/
quelle
cron
sendet bereits die Standardausgabe und den Standardfehler jedes ausgeführten Jobs per E-Mail an den Eigentümer des Cron-Jobs.Sie können
MAILTO=recipient
in dercrontab
Datei verwenden, um die E-Mails an ein anderes Konto zu senden.Damit dies funktioniert, muss die E-Mail ordnungsgemäß funktionieren. Die Zustellung an eine lokale Mailbox ist normalerweise kein Problem (tatsächlich
ls -l "$MAIL"
wird sich wahrscheinlich herausstellen, dass Sie bereits welche erhalten haben), aber für die Zustellung aus der Box ins Internet ist der MTA (Postfix, Sendmail, was haben Sie) erforderlich richtig konfiguriert sein, um eine Verbindung zur Welt herzustellen.Wenn keine Ausgabe erfolgt, wird keine E-Mail generiert.
Eine übliche Anordnung besteht darin, die Ausgabe in eine Datei umzuleiten. In diesem Fall sieht der Cron-Daemon natürlich nicht, dass der Job eine Ausgabe zurückgibt. Eine Variante besteht darin, die Standardausgabe in eine Datei umzuleiten (oder das Skript so zu schreiben, dass es nie etwas druckt - vielleicht speichert es stattdessen Ergebnisse in einer Datenbank oder führt Wartungsaufgaben aus, die einfach nichts ausgeben?) Und nur dann eine E-Mail zu erhalten, wenn es vorhanden ist ist eine Fehlermeldung.
Um beide Ausgabestreams umzuleiten, lautet die Syntax
Beachten Sie, wie wir (doppelt
>>
) anhängen anstatt zu überschreiben, damit die Ausgabe eines vorherigen Jobs nicht durch die Ausgabe des nächsten ersetzt wird.Wie in vielen Antworten hier vorgeschlagen, können beide Ausgabestreams an eine einzelne Datei gesendet werden. Ersetzen Sie die zweite Umleitung durch
2>&1
"Standardfehler sollten überall dort auftreten, wo die Standardausgabe ausgeführt wird". (Aber ich unterstütze diese Vorgehensweise nicht besonders. Es ist vor allem dann sinnvoll, wenn Sie bei der Standardausgabe nicht wirklich etwas erwarten, aber möglicherweise etwas übersehen haben, das möglicherweise von einem externen Tool stammt, das von Ihrem Skript aufgerufen wird.)cron
Jobs werden in Ihrem Home-Verzeichnis ausgeführt, daher sollten alle relativen Dateinamen relativ dazu sein. Wenn Sie außerhalb Ihres Home-Verzeichnisses schreiben möchten, müssen Sie natürlich separat sicherstellen, dass Sie Schreibzugriff auf diese Zieldatei haben.Ein häufiges Antipattern besteht darin, alles umzuleiten
/dev/null
(und dann Stack Overflow zu bitten, um herauszufinden, was schief gelaufen ist, wenn etwas nicht funktioniert; aber wir können die verlorene Ausgabe auch nicht sehen!).Stellen Sie in Ihrem Skript sicher, dass die regelmäßige Ausgabe (tatsächliche Ergebnisse, idealerweise in maschinenlesbarer Form) und die Diagnose (normalerweise für einen menschlichen Leser formatiert) getrennt sind. In einem Shell-Skript
Auf einigen Plattformen (und z. B. GNU Awk) können Sie den Dateinamen
/dev/stderr
für Fehlermeldungen verwenden, dies ist jedoch nicht ordnungsgemäß portierbar. in Perlwarn
unddie
nach Standardfehler drucken; in Python schreibensys.stderr
oder verwendenlogging
; Versuchen Sie es in Ruby$stderr.puts
. Beachten Sie auch, wie Fehlermeldungen den Namen des Skripts enthalten sollten, das die Diagnosemeldung erstellt hat.quelle
Wenn Sie einen Befehl mit sudo ausführen, wird dies nicht zugelassen. Sudo braucht einen tty.
quelle
sudo
Konfiguration ab. Dinge, die ohne die Möglichkeit zur Eingabe eines Kennworts ausgeführt werden müssen, solltenNOPASSWD:
in Ihrersudoers
Konfiguration konfiguriert werden.Wenn Sie eine gültige E-Mail-Adresse angeben, erhalten Sie die Ausgabe des ausgeführten Cron-Jobs. So können Sie es überprüfen und sicherstellen, dass alles korrekt ausgeführt wurde. Beachten Sie, dass Sie keine E-Mail erhalten, wenn der Befehl cron job keine Ausgabe enthält.
Bitte beachten Sie, dass Sie für jeden ausgeführten Cron-Job eine E-Mail erhalten. Dies kann Ihren Posteingang überfluten, falls Ihre Crones zu oft laufen
quelle