"(CRON) info (Kein MTA installiert, Verwerfen der Ausgabe)" Fehler im Syslog

142

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 mono-complete installiert und betreibe einen Service-Stack-Webserver.

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

    
sungiant 27.11.2012, 11:25
quelle

9 Antworten

136

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 das 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).

    
martin 01.01.2013, 09:56
quelle
62

Dies passiert, 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 fügen Sie >/dev/null 2>&1 jedem Job hinzu:

* * * * * yourCommand >/dev/null 2>&1
    
rob 26.04.2013 12:27
quelle
40

In meinem Fall hat die Nachricht auf ein Berechtigungsproblem mit dem Bash-Skript hingewiesen, 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 sehen, die sich auf Berechtigungen bezieht.

    
Martin Carstens 10.07.2015 16:28
quelle
20

Fügen Sie in crontab das als erste Zeile hinzu:

MAILTO=""

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

    
88weighed 27.08.2015 15:06
quelle
19

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 können Sie einfach das Protokoll zurückziehen und sehen, was passiert ist

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

Das habe ich auf jedem Server gemacht, auf dem ich diese Nachricht in syslog sehe

    
Andrew MacNaughton 17.04.2016 21:37
quelle
13

Wie bereits 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

( sudo verwenden, wenn das Problem mit der crontab von root ist) und füge >> /some/log/file 2>&1 hinzu nach jedem Befehl, so:

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

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

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

oder gruppiere sie wie folgt:

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

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

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

    
G-Man 29.07.2016 04:40
quelle
10

Ein Nebeneffekt des Hinzufügens von /dev/null 2>&1 zum Befehl cron job ist, dass sowohl STDERR als auch STDOUT (Standardfehler sowie Ausgabe) verworfen werden. Dies funktioniert gut, wenn Sie keine E-Mails von Cron wollen. Wenn Sie jedoch möchten, dass Ihre Fehler per E-Mail an Sie gesendet werden, verwenden Sie stattdessen >/dev/null . Lesen Sie diesen Blogbeitrag für weitere Erläuterungen .

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

    
paneer_tikka 30.12.2013 18:27
quelle
8

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

Verteilen Sie die Ausgabe Ihres cron-Befehls durch logger , damit sie im syslog enden.

Es ist etwas einfacher als die Installation von Postfix, und es fügt diese Ausgabe in syslog neben Ihren anderen Protokollen ein. Dieser Befehl erfasst stdout AND stderr, so dass Sie die No MTA installed -Nachricht nicht sehen und Ihre gesamte Ausgabe im syslog angezeigt wird.

Beispiel Cron-Eintrag:

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

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

verwenden
grep 'mycmd' /var/log/syslog
    
Michael Hunter 23.10.2017 00:44
quelle
1

Sie können die Variable MAILTO=”” am Anfang Ihrer crontab -Datei setzen. 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=""

Pfandrecht

    
Damien Cuvillier 19.02.2018 06:18
quelle

Tags und Links