Frage "(CRON) info (Kein MTA installiert, verwerfen Ausgabe)" Fehler im Syslog


Ich habe eine neue Installation von Ubuntu 12.04.1 LTS und eine Reihe von Servern.

Ich habe keine Cron-Jobs hinzugefügt oder meine Crontab auf diesen Servern bearbeitet, aber ungefähr zur gleichen Zeit für jede Maschine bekomme ich eine 75% CPU-Spitze und die folgenden Informationen in meinem Syslog zur Zeit der Spitze:

CRON[8380]: (CRON) info (No MTA installed, discarding output)

Ich habe Monocomplete installiert und betreibe einen Service-Stack-Webserver.

Was ist der beste Weg für mich, damit aufzuhören? Ich möchte in der Lage sein, die CPU-Spitze zu entfernen.


146
2017-11-27 10:25


Ursprung


Jeden Tag um 6:25? Das sind Skripte von /etc/cron.daily/. Ich habe nur einen Versuch, Post zu schicken: Popularitäts-Wettbewerb. Schauen Sie sich Ihre Skripte an und sehen Sie, welches Skript versucht, E-Mails zu senden? Das sollte es eingrenzen. Dann 'chmod 0644 /etc/cron.daily/script-name', um die Ausführung zu verhindern.


Antworten:


Linux verwendet Mail zum Senden von Benachrichtigungen an den Benutzer. Die meisten Linux-Distributionen haben einen Mail-Dienst (einschließlich eines MTA) installiert. Ubuntu tut es nicht.

Sie können einen Mail-Dienst, zum Beispiel Postfix, installieren, um dieses Problem zu lösen.

sudo apt-get install postfix

Oder Sie können es ignorieren. Ich glaube nicht, dass die Unfähigkeit von Cron, Nachrichten zu senden, irgendetwas mit der CPU-Spitze zu tun hat (die mit dem zugrundeliegenden Job verbunden ist, der cron läuft). Es wäre am sichersten, einen MTA zu installieren und dann die Nachrichten zu lesen (mutt ist ein guter System Mail Reader).


139
2018-01-01 08:56



Ist Postfix eine gute Sache zu installieren? Welcher MTA ist am einfachsten zu verwenden? - endolith
Postfix ist der am weitesten verbreitete Mailserver für Linux, bleibe dabei - Rápli András
Es lohnt sich, darauf hinzuweisen, dass Sie für die Verwendung mit cron (das heißt, wenn Sie keine E-Mails nach außen senden möchten) während der Installationsprozedur antworten sollten, nur für die lokale Verwendung zu konfigurieren. - steffen


Dies geschieht, weil Ihre Cron-Jobs eine Ausgabe erzeugen und der Cron-Daemon versucht, Ihnen diese Ausgabe per E-Mail zu senden (d. H. Root). Wenn Sie diese Ausgabe nicht benötigen, ist der einfachste Weg, dies zu lösen, das Löschen auf der crontab:

sudo crontab -e

und hinzufügen >/dev/null 2>&1 zu jedem Job:

* * * * * yourCommand >/dev/null 2>&1

63
2018-04-26 10:27



Das Problem bei diesem Ansatz ist nicht die hohe CPU-Auslastung. Cron versucht eindeutig, kommunikativ zu sein, und dies ignoriert im Wesentlichen die Ausgabe. Ich würde eher mit der Ausgabe umgehen als sie zu verwerfen, nur für den Fall, dass es nützliche Debug-Informationen gibt. - Oli♦
Oli, obwohl dies eine alte Frage ist, habe ich das gleiche Problem, aber es ist auf Raspberry PI. Ich sehe Haufen von No MTA installed, discarding output Nachricht im Protokoll und mein Programm hört schließlich auf, allein zu laufen. Ich glaube, es liegt an der CPU-Spitze. Es sieht so aus, als ob die Antwort für diese Frage ignoriert wird. - ThN
Um die Ausgabe beizubehalten, setzen Sie den Befehl in ein Skript und pipen Sie stdout und stderr an logger. Beispielsweise, yourCommand >/dev/null 2>&1 | logger -t mycmd. Dadurch wird die Ausgabe in syslog gespeichert und die MTA-Beschwerden werden gestoppt. - CivMeierFan


In meinem Fall wies die Nachricht auf ein Berechtigungsproblem mit dem Bash-Skript hin, aber ich konnte es nicht sehen, bis ich einen MTA installiert habe.

Wie vorgeschlagen lief ich:

sudo aptitude install postfix

Ich habe "Local" während der Installation gewählt und nachdem ich den Cron-Job erneut ausgeführt habe:

sudo tail -f /var/mail/<user>

In meinem Fall habe ich ersetzt

<user>

mit "root".

Ich konnte dann die Fehlerausgabe in Bezug auf Berechtigungen sehen.


41
2017-07-10 14:28



Vielen Dank für den zusätzlichen Kommentar zur Überprüfung der Mailbox, um Fehler vom Job zu sehen! - Stuart Allen


In crontab füge das als erste Zeile hinzu:

MAILTO=""

Dadurch wird verhindert, dass Cron versucht, eine E-Mail zu senden.


20
2017-08-27 13:06



Schreibe keine Kommentare (#) nach MAILTO="" oder es wird nicht funktionieren - SBF


Wenn Sie keinen MTA installieren möchten (den ich derzeit nicht benötige), können Sie die Ergebnisse des Cron-Jobs in eine Protokolldatei pipen.

sudo crontab -e

Dann würde dein Cron-Job so aussehen.

0 3 * * * /cmd/to/run >> /var/log/somelogfile.log

dann kannst du einfach das Protokoll zurücklassen und sehen, was passiert ist

sudo tail -f -n 50 /var/log/somelogfile.log

Dies ist, was ich auf jedem Server gemacht habe, auf dem ich diese Nachricht in Syslog sehe


19
2018-04-17 19:37



Ich habe dies getan, aber der Datei wird keine Protokollierung hinzugefügt. - pir
Sind Sie sicher, dass der Cron-Job ausgeführt wurde? - Andrew MacNaughton
Ja, das Systemprotokoll zeigt, dass es gestartet wird. - pir
Sie benötigen '2> & 1' am Ende der Zeile, um die Ausgabe in stderr in der Datei zu erfassen. - MattSmith


Wie in einer früheren Antwort erwähnt, Dies geschieht, weil Ihre Cron-Jobs Ausgabe produzieren, und dann versucht der Cron-Daemon, diese Ausgabe an Sie zu mailen. Wenn Sie einen MTA nicht installieren möchten (oder können), aber Sie wollen die Ausgabe sehen, Sie können die Ausgabe des Cron-Jobs in eine Protokolldatei umleiten. Bearbeiten Sie Ihre Crontab-Datei mit

crontab -e

(benutzen sudo wenn das Problem mit der Crontab von root ist) und hinzufügen >> / einige / Protokoll / Datei 2>&1 nach jedem Befehl, so:

0 3 * * * cmd  >> / einige / Protokoll / Datei 2> & 1

Wenn es mehrere Befehle in einer Zeile gibt, getrennt durch ;, &&oder ||, Sie sollten das oben für jeden Befehl tun, wie folgt:

0 3 * * * cmd1  >> / einige / Protokoll / Datei 2> & 1; cmd2  >> / einige / Protokoll / Datei 2> & 1

oder gruppiere sie wie folgt:

0 3 * * * (cmd1; cmd2)  >> / einige / Protokoll / Datei 2> & 1

Wenn Sie stdout ignorieren und nur stderr erfassen möchten, benutzen > /dev/null 2>> / einige / Protokoll / Dateistattdessen. Versetzen Sie die Protokolldatei an eine beliebige Stelle - Ihr Home-Verzeichnis, /var/log, oder auch /tmp wenn Sie sicher sind, dass Sie es nicht behalten müssen.

Sehen Sie sich die Protokolldatei an, nachdem der Job ausgeführt wurde.


13
2017-07-29 02:40





Ein Nebeneffekt des Hinzufügens /dev/null 2>&1 zu dem Cron-Job-Befehl, ist, dass es beide ablegt STDERR und STDOUT (Standardfehler sowie Ausgabe). Dies funktioniert gut, wenn Sie keine E-Mails von Cron wollen. Aber wenn Sie möchten, dass Ihre Fehler per E-Mail an Sie gesendet werden, verwenden Sie >/dev/null stattdessen. Lesen Sie diesen Blogpost für weitere Erläuterungen.

Sie müssen dennoch einen MTA (Message Transfer Agent) installieren, um die Fehler-E-Mails zu senden. Postfix ist einfach zu installieren mit: sudo apt-get install postfix


10
2017-12-30 17:27



Soweit ich das verstanden habe, wird '> / dev / null' nur senden, und '> / dev / null 2> & 1' wird alle Fehler ausgeben? Was müsste ich verwenden, um Fehler im Protokoll, aber keine Mails zu bekommen? Ich bekomme jetzt keine Mails (wie ich es will) aber das hässliche "no MTA ..." - Pit
afaik, es gibt keine Möglichkeit, die Ausgabe zu protokollieren, außer sie an E-Mails zu senden. Das nächste, was Sie tun können, ist, Postfix für die lokale Mailzustellung einzurichten (wenn Sie "sudo apt-get install postfix" ausführen, werden Sie gefragt, ob Sie die lokale Zustellung einrichten wollen. Das sah zunächst wie ein Schmerz aus, funktioniert aber tatsächlich viel besser.Wenn ich mich über ssh anmelde, sehe ich eine neue E-Mail auf dem Rechner, wenn ein vorhergehender Job fehlgeschlagen ist.Ich finde es bequemer als das Protokoll zu überprüfen. - paneer_tikka
Ich denke, das könnte für mich in Ordnung sein. Vielen Dank - Pit


Dies ist eine alte Frage, aber es gibt eine zusätzliche Antwort, die unter bestimmten Umständen nützlich ist.

Verlegen Sie die Ausgabe Ihres Cron-Befehls durch logger Also landen sie im Syslog.

Es ist etwas einfacher als die Installation von Postfix, und es stellt diese Ausgabe in syslog neben Ihren anderen Protokollen. Dieser Befehl wird stdout AND stderr erfassen, so dass Sie die No MTA installed Nachricht und Sie sehen Ihre gesamte Ausgabe im Syslog.

Beispiel Cron-Eintrag:

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd

Sie können Protokolle mit Ihrem Tag anzeigen mycmd mit:

grep 'mycmd' /var/log/syslog

8
2017-10-22 22:44



Funktionieren Pipes in Cron-Jobs? - CivMeierFan