"(CRON) info (Kein MTA installiert, Ausgabe wird verworfen)" Fehler im Syslog

198

Ich habe eine Neuinstallation von Ubuntu 12.04.1 LTS und eine Reihe von Servern.

Ich habe auf diesen Servern keine cron-Jobs hinzugefügt oder meine crontab bearbeitet. Zum Zeitpunkt des Spikes erhalte ich jedoch ungefähr zur gleichen Zeit für jeden Computer einen CPU-Spitzenwert von 75% und die folgenden Informationen in meinem Syslog:

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

Ich habe Mono-Complete installiert und betreibe einen Service-Stack-Webserver.

Wie kann ich das am besten verhindern? Ich möchte in der Lage sein, die CPU-Spitze zu entfernen.

strahlend
quelle
Jeden Tag um 6:25? Das sind Skripte von /etc/cron.daily/. Ich habe nur einen, der versucht, eine E-Mail zu senden: Popularitätswettbewerb. Durchsuchen Sie Ihre Skripte 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:

173

Linux verwendet Mail zum Senden von Benachrichtigungen an den Benutzer. Bei den meisten Linux-Distributionen ist ein Mail-Dienst (einschließlich eines MTA) installiert. Ubuntu allerdings nicht.

Sie können einen Mail-Dienst, z. B. Postfix, installieren, um dieses Problem zu beheben.

sudo apt-get install postfix

Oder du kannst es ignorieren. Ich denke nicht, dass die Unfähigkeit von cron, Nachrichten zu senden, irgendetwas mit dem CPU-Anstieg zu tun hat (der mit dem zugrunde liegenden Job zusammenhängt, den cron ausführt). Es ist möglicherweise am sichersten, einen MTA zu installieren und dann die Nachrichten zu lesen (dies muttist ein guter System-Mail-Reader).

martin
quelle
5
Ist Postfix eine gute Sache zu installieren? Welcher MTA ist am einfachsten zu bedienen?
Endolith
2
Postfix ist der am häufigsten verwendete Mailserver für Linux, bleiben Sie dabei
Rápli András
5
Es sei darauf hingewiesen, dass Sie zur Verwendung mit cron (d. H. Wenn Sie keine E-Mails nach außen senden möchten) während des Installationsvorgangs nur antworten sollten, um die Konfiguration für die lokale Verwendung vorzunehmen.
Steffen
Die einzige Möglichkeit, E-Mails zu überprüfen, mailbietet mailutils(debian), wenn es eine bessere Möglichkeit gibt, Postfix zu installieren.
ThorSummoner
79

Dies geschieht, weil Ihre Cron-Jobs eine Ausgabe erzeugen und der Cron-Daemon dann versucht, diese Ausgabe per E-Mail an Sie (dh root) zu senden. Wenn Sie diese Ausgabe nicht benötigen, können Sie sie am einfachsten auf der crontab löschen:

sudo crontab -e

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

* * * * * yourCommand >/dev/null 2>&1
rauben
quelle
10
Das Problem bei diesem Ansatz ist, dass er die hohe CPU-Auslastung nicht erklärt. Cron versucht eindeutig, kommunikativ zu sein, und dies ignoriert im Wesentlichen nur die Ausgabe. Ich würde eher mit der Ausgabe umgehen als sie verwerfen, nur für den Fall, dass es nützliche Debug-Informationen gibt.
Oli
1
Oli, obwohl dies eine alte Frage ist, habe ich das gleiche Problem, aber es ist auf Raspberry PI. Ich sehe eine Reihe von No MTA installed, discarding outputMeldungen im Protokoll und mein Programm hört schließlich von selbst auf zu laufen. Ich glaube, es liegt an der CPU-Spitze. Es sieht so aus, als ob alle Antworten auf diese Frage dies ignorieren.
Donnerstag,
4
Um die Ausgabe beizubehalten, fügen Sie den Befehl in ein Skript ein und leiten Sie stdout und stderr an logger. Zum Beispiel yourCommand >/dev/null 2>&1 | logger -t mycmd. Dadurch wird die Ausgabe zur sicheren Aufbewahrung in syslog abgelegt und die MTA-Beschwerden werden gestoppt.
CivMeierFan
56

In meinem Fall deutete die Nachricht auf ein Berechtigungsproblem mit dem Bash-Skript hin, aber ich konnte es erst sehen, nachdem ich einen MTA installiert hatte.

Wie vorgeschlagen lief ich:

sudo aptitude install postfix

Ich habe während des Setups und nach dem erneuten Ausführen des Cron-Jobs "Lokal" ausgewählt:

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.

Martin Carstens
quelle
3
Vielen Dank für den zusätzlichen Kommentar zum Überprüfen des Postfachs, um Fehler aus dem Auftrag zu erkennen!
Stuart Allen
32

Wie bereits in einer früheren Antwort erwähnt, geschieht dies, weil Ihre Cron-Jobs eine Ausgabe erzeugen und der Cron-Daemon dann versucht, diese Ausgabe per E-Mail an Sie zu senden. Wenn Sie keinen MTA installieren möchten (oder können), die Ausgabe jedoch anzeigen möchten, können Sie die Ausgabe des Cron-Jobs in eine Protokolldatei umleiten. Bearbeiten Sie Ihre crontab-Datei mit

crontab -e

(Verwenden Sie sudodiese Option, wenn das Problem bei der crontab von root liegt.) Fügen Sie nach jedem Befehl Folgendes hinzu :>> /some/log/file 2>&1

0 3 * * * cmd   >> / some / log / file 2> & 1

Wenn mehrere Befehle auf einer Linie sind, getrennt durch ;,  &&  oder ||, sollten Sie für jeden Befehl die oben tun, wie folgt aus :

0 3 * * * cmd 1   >> / some / log / file 2> & 1;  cmd 2   >> / some / log / file 2> & 1

oder gruppiere sie wie folgt:

0 3 * * * ( cmd 1 ;   cmd 2 )   >> / some / log / file 2> & 1

Wenn Sie stdout ignorieren und nur stderr erfassen möchten, verwenden Sie stattdessen. Platzieren Sie die Protokolldatei an einem beliebigen Ort - in Ihrem Home-Verzeichnis, oder auch dann, wenn Sie sicher sind, dass Sie sie nicht aufbewahren müssen.> /dev/null 2>> /some/log/file/var/log/tmp

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

G-Man
quelle
28

In crontab füge dies als erste Zeile hinzu:

MAILTO=""

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

88weighed
quelle
4
Setzen Sie keine Kommentare ( #) nach MAILTO=""oder es wird nicht funktionieren
SBF
23

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

sudo crontab -e

dann mit deinem cron job würde das so aussehen.

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

dann können Sie einfach das Protokoll verfolgen und sehen, was passiert ist

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

Dies ist, was ich auf jedem Server getan habe, auf dem ich diese Nachricht im Syslog sehe

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

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

Leiten Sie die Ausgabe Ihres Cron-Befehls durch, loggerdamit sie im Syslog landen.

Es ist etwas einfacher als die Installation von Postfix und fügt diese Ausgabe zusammen mit Ihren anderen Protokollen in Syslog ein. Dieser Befehl erfasst stdout AND stderr, sodass Sie die No MTA installedMeldung nicht sehen und Ihre gesamte Ausgabe im Syslog sehen.

Beispiel für einen Cron-Eintrag:

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

Sie können Protokolle mit Ihrem Tag anzeigen, mycmdindem Sie Folgendes verwenden:

grep 'mycmd' /var/log/syslog
Michael Hunter
quelle
Arbeiten Rohre in Cronjobs?
CivMeierFan
10

Ein Nebeneffekt des Hinzufügens /dev/null 2>&1zum Cron-Job-Befehl ist, dass er sowohl STDERRund STDOUT(Standardfehler als auch Ausgabe) verwirft . Dies funktioniert gut, wenn Sie keine E-Mails von cron möchten. Wenn Sie jedoch möchten, dass Ihre Fehler per E-Mail an Sie gesendet werden, verwenden Sie >/dev/nullstattdessen. Lesen Sie diesen Blog-Beitrag für weitere Erklärungen .

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

Paneer Tikka
quelle
Soweit ich verstanden habe, werden sie nur von '> / dev / null' gesendet, und '> / dev / null 2> & 1' wird alle Fehler ignorieren? Was müsste ich verwenden, um Fehler im Protokoll zu erhalten, aber keine E-Mails? Ich bekomme jetzt keine Mails (wie ich es will), aber das hässliche "kein MTA ..."
Pit
2
afaik, es gibt keine andere Möglichkeit, die Ausgabe zu protokollieren, als 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 möchten. Dies sah anfangs nach Schmerzen aus, funktioniert aber tatsächlich viel besser. Immer wenn ich mich über ssh anmelde, sehe ich eine neue E-Mail auf dem Computer, wenn ein vorheriger Auftrag fehlgeschlagen ist. Ich finde es bequemer, als das Protokoll überprüfen zu müssen.
paneer_tikka
2
  1. Installieren Sie zunächst postfix, um das Problem zu beheben

    sudo apt-get install postfix
    
  2. Unter Ubuntu können Sie die crontabDatei bearbeiten

    sudo vim /etc/crontab
    
  3. Achtung , editiere die Top-Datei , keinen Code in der ersten Zeile , und gib ein

    MAILTO=root // current system user
    
  4. Wenn Sie croneine Aufgabe ausführen, erhalten Sie eine E-Mail

    mail
    
shahramlu
quelle
1
Ihre Antwort scheint gut zu sein, aber ich konnte nicht alle Anweisungen verstehen. Vielleicht kannst du es verbessern.
zx485,
1

Sie können die MAILTO=””Variable am Anfang Ihrer crontabDatei festlegen . Dadurch wird auch die E-Mail-Benachrichtigung deaktiviert. Bearbeiten / Öffnen Sie Ihre Cron-Jobs:

$ crontab -e

Geben Sie oben in der Datei Folgendes ein:

MAILTO=""

https://www.cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command/

Damien Cuvillier
quelle
1

Ich hatte dieses Problem mit den Kitematic Docker-Tools .
Gehe in den Magento Container und klicke auf exe.

Dann renne

apt-get update

Dies ist der Fall, wenn Sie versuchen, Magento auf kitematic zum Laufen zu bringen. Das Protokoll zeigt diesen Fehler auf der virtuellen Maschine an:

brauche Update.

Tut mir leid, wenn Sie sich dadurch verlaufen haben, aber so funktioniert es. Sie verlieren sich immer wieder, aber lesen Sie einfach darüber und eines Tages werden die Teile zusammenkommen. Sei geduldig.

Ali Bayati
quelle