Kann cron Jobausgaben standardmäßig in ein Protokoll schreiben (anstelle von E-Mails)?

23

Wir alle wissen, dass die Ausgabe von Cron-Jobs auf die richtige Weise verarbeitet werden kann, indem sie in eine Datei umgeleitet wird:

0 * * * * /bin/date >> /var/log/date.log 2>&1

Manchmal sind Administratoren jedoch faul, vergesslich oder ignorant und setzen diese Weiterleitungen nicht ein. In diesem Fall wird die Ausgabe des Jobs per E-Mail an $ MAILTO oder den Benutzer oder Root gesendet. Bei einigen der von mir verwalteten Boxen ist die E-Mail-Funktion deaktiviert, sodass diese Ausgabe in ein schwarzes Loch fließt. Was ich mich wundere, ist, gibt es eine Möglichkeit, cron anzuweisen, Auftragsausgaben zu übernehmen und sie, anstatt sie zu verschicken, irgendwo in eine Catch-All-Protokolldatei zu werfen? Ich verwende Ubuntu (8.04, aber migriere auf 9.04). Es gibt einen Hinweis auf eine solche Lösung in diesem zufälligen Google-Ergebnis , aber ich denke, dass das OP in Bezug auf die Cron-Ausgabe im Vergleich zur Ausgabe von Cron-Jobs verwirrt war.

Ich bin offen für Lösungen, die ein bisschen Scripting oder Hacking beinhalten, aber im Idealfall wäre dies ein Konfigurationsbit, das ich irgendwo setzen könnte. Ich sehe keine Hinweise in man cron. Vielen Dank!

Brad
quelle

Antworten:

1

Für croniecron (das zum Beispiel von Gentoo Handbook empfohlen wird) gibt es das Argument "-s" für cron call, das die Jobausgabe mit syslog an das Systemprotokoll sendet.

Tomáš Diviš
quelle
3

Die kurze Antwort lautet: Nein, cron-Mails an den Eigentümer der crontab per Design. In der Standard-Cron gibt es keine Möglichkeit, dies zu ändern.

Das Beste, was ich mir vorstellen kann, ist, die MTAs auf den Computern zu konfigurieren, auf denen dieses Verhalten die E-Mails in eine Protokolldatei anstelle eines Benutzerpostfachs speichern soll.

Kamil Kisiel
quelle
3

Ich bin mir nicht sicher, was Sie genau meinen, wenn Sie sagen "Mail ist deaktiviert". Aber vielleicht könnten Sie einen Alias ​​einrichten /etc/aliases, der auf eine Pipe verweist? So etwas wie

root: "|/bin/cat >> /var/log/cron.log"
innaM
quelle
root: /var/log/cron.loggeht nicht feep.net/sendmail/tutorial/intro/aliases.html
endolith
Weder tut etwas für mich.
Endolith
Diese funktionieren möglicherweise nur, wenn Sie sendmail als Ihren MTA ausführen. Dies wird immer seltener. (Ja, ich weiß, dass ich auf einen 5-jährigen Kommentar antworte!)
Alex L
2

Ich glaube nicht, dass das, wonach Sie fragen, mit Ubuntu (oder einem anderen) Cron tatsächlich möglich ist.

Abgesehen von der Idee von geekmonkeys können Sie $ MAILTO auch auf ein lokales Konto festlegen und die Ausgabe über procmail weiterleiten .

Adam
quelle
1

Habe noch nie von einer solchen Einstellung für Cron gehört, also würde ich den Drehbuchweg einschlagen.

Erstellen Sie einen Cron-Job, um / var / spool / cron / * zu überwachen, und hängen Sie die Umleitung an jeden Job an, der keinen hat.

Geekmonkey
quelle
1

Eine andere Möglichkeit wäre, ein Shell-Skript mit dem Namen cron_wrapper oder so zu erstellen und es einfach so machen zu lassen:

#! / bin / sh

eval "$ * >> /var/log/cronlog.log"
$ beenden?

Dann brauchen alle Ihre Crontabs nur so etwas:

* * * * * / usr / local / bin / cron_wrapper hallo

Hinweis Ich habe diesen Code nicht getestet, es ist nur eine Idee.

Justin Ellison
quelle
1
Das löst das Problem nicht. Wenn die Leute sich nicht erinnern können, MAILTO gesetzt oder stdout in eine Datei umgeleitet zu haben, werden sie nicht daran denken, etwas durch den Wrapper zu leiten.
Kamil Kisiel
1

Ich weiß nicht, was der "Standard-Cron" ist. Es gibt viele Cron-Daemons, verschiedene Distributionen verwenden unterschiedliche. Vixie Cron ist am weitesten verbreitet, also haben Sie es wahrscheinlich so gemeint. In einigen Distributionen wäre dies jedoch nicht die Standardeinstellung.

Ich habe die Entwicklung von Dillons cron (dcron) übernommen, dem Standard für Arch Linux. Andere Distributionen verwenden es auch, aber ich weiß nicht, ob es anderswo die Standardeinstellung ist. dcron verfügt über eine Aufrufoption -M, mit der Sie angeben können, dass Sie ein benutzerdefiniertes Skript anstelle von sendmail verwenden möchten. Das Skript wird ohne Argumente und mit einigen E-Mail-Headern und der &>Ausgabe von Cronjobs als stdin aufgerufen. (Wenn keine &>Ausgabe erfolgt, wird das Skript nicht aufgerufen.)

zweifelhafter jim
quelle
1

Warum setzen wir MAILTO = "" nicht in der Crontab eines bestimmten Benutzers? Dadurch wird die Protokollierung von E-Mail-Nachrichten in / var / spool / mail / deaktiviert.

lalit
quelle