Wie Sie sich cron-jobs?
Möchte ich wissen, wie ich genau sehen kann, was die cron-jobs sind in jeder Ausführung. Wo sind die log Dateien? Oder kann ich senden Sie die Ausgabe an meine E-Mail? Ich habe die E-Mail-Adresse senden, die melden, wenn der cron-job läuft, aber ich habe nichts empfangen noch.
- Werfen Sie einen Blick auf dieser Beitrag: Verwalten von Protokolldateien erstellt von cron-jobs.
Du musst angemeldet sein, um einen Kommentar abzugeben.
log-all Ausgabe von dem cron-job in /var/log/myjob.melden Sie
Könnten Sie
mail
zum senden von E-Mails. Die meisten Systeme senden unbehandeltecron
job-Ausgabe per E-Mail an root oder der entsprechenden Benutzer.2>&1
: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21stderr
undstdout
im Protokoll, der2>&1
kommt nach der Dereferenzierung:myjob.sh >> /var/log/myjob.log 2>&1
YYYY-MM-DD_hh-mm-sec
in die Ausgabe-Datei-Namen, so dass jeder Dateiname anders ist, und beibehalten, ohne umschreiben?date +\%Y\%m\%d\%H\%M\%S
-cron.log 2>&1Standardmäßig cron-logs in /var/log/syslog so können Sie sehen, cron-Verwandte Einträge mit:
https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log
journalctl | grep cron
auf systemd-Systemen/var/log/cron
auf AWS-Linux-AMI.sudo journalctl -u cron
cron
geloggt ist sehr system-abhängig. Es gibt eine separate Antwort mit details darüber, wie verschiedene logging-Ziele konfiguriert, werden auf Linux-Systemen (oder mehr richtig, Systemen, die die Verwendungsyslog
). Andere Systeme haben vielleicht einen anderen Weg, um die Konfiguration dieser Dinge.Hier ist mein code:
>>
hängt und2>&1
sagt zum senden von standard-Fehlermeldung an der gleichen Stelle wie der standard-Ausgabe aus.Gibt es mindestens drei verschiedene Arten der Protokollierung:
Die Protokollierung, BEVOR das Programm ausgeführt wird, welches nur dann protokolliert, WENN die
cronjob VERSUCHT, den Befehl auszuführen. Dass man sich in
/var/log/syslog, wie schon erwähnt von @Matthäus Sperren.
Die Protokollierung von Fehlern wenn das Programm versucht zu führen, die gesendet werden können
eine E-Mail oder einer anderen Datei, wie erwähnt von @Spliffster. Ich bevorzuge Protokollierung
in eine Datei, weil mit E-Mail-DANN haben Sie eine NEUE Quelle der
Probleme und deren Prüfung, wenn die E-Mail-Versand und-Empfang funktioniert
perfekt. Manchmal ist es, manchmal nicht. Zum Beispiel, in einem
einfache gemeinsame desktop-Rechner, in dem Sie nicht interessiert sind
konfigurieren eines smtp, manchmal werden Sie es vorziehen, die Protokollierung in eine Datei:
Gibt es einige gemeinsame Quellen der Probleme mit den cronjobs:
* Der ABSOLUTE PFAD der Binärdatei ausgeführt werden. Wenn Sie führen Sie es von Ihrem
shell, es könnte funktionieren, aber der cron-Prozess scheint eine andere zu verwenden
Umwelt, und damit es nicht immer das finden, binaries, wenn Sie nicht
verwenden Sie einen absoluten Pfad.
* Die BIBLIOTHEKEN verwendet, die durch eine binäre. Es ist mehr oder weniger die gleichen vorherigen Punkt, aber stellen Sie sicher, dass, wenn Sie den NAMEN des Befehls, bezieht sich auf genau die binäre, die verwendet die gleiche Bibliothek, oder besser, überprüfen Sie, ob die binäre Sie sprechen mit dem absoluten Pfad ist der gleiche, die Sie beziehen, wenn Sie die Konsole direkt. Die Binärdateien finden Sie mit Hilfe der locate-Befehl, zum Beispiel:
Sicher sein, dass das binary, das Sie beziehen, ist die gleiche die binären Sie den Aufruf in der shell oder einfach test wieder in der shell mit dem absoluten Pfad, den Sie planen, um in die cronjob.
http://www.softpanorama.org/Utilities/cron.shtml
Unter Ubuntu können Sie ein
cron.log
- Datei enthält nur die CRON-Einträge.Kommentieren Sie die Zeile, erwähnt
cron
im/etc/rsyslog.d/50-default.conf
Datei:Speichern und schließen Sie die Datei und starten Sie den
rsyslog
service:Können Sie jetzt sehen, cron log-Einträge in einer eigenen Datei:
Probe-Ausgänge:
Allerdings werden Sie nicht sehen, Sie weitere Informationen, welche Skripte tatsächlich ausgeführt innerhalb
/etc/cron.daily
oder/etc/cron.hourly
, es sei denn, diese Skripte direkte Ausgabe der cron.melden Sie (oder vielleicht einige andere log-Datei).Wenn Sie möchten, um zu überprüfen, ob ein Eintrag in der crontab ausgeführt wird und nicht zu suchen und es in
cron.log
odersyslog
erstellen ein Eintrag in der crontab, leitet die Ausgabe in eine log-Datei Ihrer Wahl - so etwas wie:Schritte aus: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/
cron
schon schickt die standard-Ausgabe und standard-Fehler der jeden job läuft es per mail an den Besitzer des cron-job.Können Sie
MAILTO=recipient
imcrontab
- Datei zu haben, die E-Mails an ein anderes Konto.Damit dies funktioniert, müssen Sie die E-mail richtig funktioniert. Die Bereitstellung einer lokalen mailbox ist in der Regel kein problem (in der Tat sind die Chancen
ls -l "$MAIL"
zeigen, dass Sie bereits empfangen einige), aber bekommen es aus der box und auf das internet erfordert, die der MTA (Postfix, Sendmail, was auch immer) korrekt konfiguriert sein, um eine Verbindung zu der Welt.Wenn es gibt keine Ausgabe, keine E-Mail generiert werden.
Einer gemeinsamen Vereinbarung ist die Ausgabe in eine Datei umleiten, in dem Fall natürlich der cron-daemon nicht sehen, den job zurückkehren, keine Ausgabe. Eine Variante ist die Umleitung der Standardausgabe auf eine Datei (oder das script schreiben, damit es nie gedruckt, was - vielleicht ist es speichert die Ergebnisse in einer Datenbank statt, oder führt Wartungsarbeiten, die einfach nicht ausgeben alles?) und erhalten nur eine Mail, wenn es eine Fehlermeldung gibt.
Umleiten sowohl output-streams, die syntax ist
Bemerken, wie wir die append (double
>>
) statt von überschreiben, so dass alle vorherigen job output wird nicht ersetzt durch die nächste.Wie vorgeschlagen in vielen Antworten hier, Sie können sowohl Ausgangs-streams gesendet werden, um eine einzelne Datei; ersetzen Sie die zweite Umleitung mit
2>&1
zu sagen "standard-Fehler gehen sollte, wo standard-Ausgabe geht". (Aber ich weiß nicht besonders befürworten diese Praxis. Es vor allem Sinn macht, wenn Sie nicht wirklich erwarten, dass alles, was auf der standard-Ausgabe, kann aber etwas übersehen, vielleicht aus einem externen tool, die aufgerufen wird, aus dem Skript.)cron
- jobs laufen in Ihrem home-Verzeichnis, so dass jede relative Dateinamen sollten relativ zu diesem. Wenn Sie schreiben wollen, außerhalb Ihres home-Verzeichnisses, müssen Sie selbstverständlich separat stellen Sie sicher, dass Sie Schreibzugriff auf das Ziel-Datei.Einer gemeinsamen antipattern ist die Umleitung alles zu
/dev/null
(und dann Fragen, für Stack-Überlauf, um Ihnen zu helfen herauszufinden, was falsch gelaufen ist, wenn etwas nicht funktioniert; aber wir können nicht sehen, die verlorene Ausgang, entweder!)In Ihrem Skript, stellen Sie sicher zu halten reguläre Ausgabe (die tatsächlichen Ergebnisse, idealerweise in Maschinen-lesbarer form) und die Diagnostik (in der Regel formatiert für einen menschlichen Leser) zu trennen. In einem shell-Skript,
Einige Plattformen (und z.B. GNU Awk) können Sie den Datei-Namen
/dev/stderr
für Fehlermeldungen, aber das ist nicht richtig tragbar; in Perlwarn
unddie
print to standard error"; in Python schreibensys.stderr
oder verwendenlogging
; Ruby, versuchen$stderr.puts
. Beachten Sie auch, wie Fehlermeldungen, sollte der name des Skripts, die produziert die Diagnose-Nachricht.Incase Sie einen Befehl mit sudo, es nicht zulassen, dass es. Sudo muss ein tty.
sudo
Konfiguration. Dinge, die ausgeführt werden müssen, ohne eine Möglichkeit für ein Passwort konfiguriert werden solltenNOPASSWD:
in Ihremsudoers
Konfiguration.Wenn Sie geben Sie eine gültige E-Mail-Sie erhalten die Ausgabe der cron-job ausgeführt wird. So werden Sie in der Lage sein, es zu überprüfen und sicherzustellen, dass alles korrekt ausgeführt wurde. Beachten Sie, dass Sie keine E-Mail erhalten, wenn es keine Ausgabe von dem cron-job-Befehl.
Bitte beachten Sie, dass Sie eine E-Mail erhalten für jede ausgeführte cron-jobs. Dies kann zu überfluten Ihren Posteingang, falls Ihr crons laufen zu oft