Das Cron-Jobprotokoll lautet "Kein MTA installiert". Verhindert dies, dass der CRON-Job beendet wird?

7

Ich habe einen Cron-Job, der nur rsync in einem bestimmten Verzeichnis ausführt.

Wenn ich den Befehl rsync selbst ausführe sudo rsync -av --delete /directory1 /directory2, wird er ohne Probleme ausgeführt und funktioniert genau wie beabsichtigt.

Wenn der Cron-Job ausgeführt wird, wird er in /var/log/syslog.1 angezeigt und lautet wie folgt (zusammengefasst):

Mar  12 11:38:01 ip-xx-xx-xx-xxx CRON[4970]: (root) CMD (rsync --delete /my/directory /backup/directory)
Mar  12 11:38:01 ip-xx-xx-xx-xxx CRON[4970]: (CRON) info (No MTA installed, discarding output)

Die Dateien befinden sich jedoch nicht im Sicherungsverzeichnis (daher wird sie nicht abgeschlossen).

No MTA installedVerhindert diese zweite Aussage über ' ' den Abschluss des Cron-Jobs? Was ist der beste Weg, um diesen Cron-Job abzuschließen und den MTA-Fehler zu beseitigen?

Ich habe diese Antwort gefunden , aber es heißt nicht, ob dies den Abschluss des Jobs verhindert.

Hanny
quelle
Zeigen Sie uns Ihre crontab. Zeigen Sie uns Ihr Skript. No MTA installedmacht mich zu "No Mail Transfer Agent installiert", und Ihr Cron-Job versucht, E-Mails zu senden (möglicherweise nur durch Schreiben an STDERR oder STDOUT).
Walzer

Antworten:

7

Nein, es verhindert nicht, dass der CRON-Auftrag beendet wird.

Normalerweise sollten Sie nicht zulassen, dass Ihr CRON-Job eine Ausgabe generiert, ohne ihm mitzuteilen, wo er sie schreiben soll. Wenn Sie dies tun, wie in diesem Fall, versucht CRON, es irgendwohin zu senden (ebenfalls in der crontabDatei angegeben). Wenn dies nicht erfolgreich ist, wird die Ausgabe, wie in der Protokolldatei angegeben, verworfen und fortgesetzt.

In Ihrem Fall ist kein "Message Transfer Agent" installiert. Dies ist ein generischer Name für Pakete wie postfixund ssmtp, die einen mailBefehl bereitstellen .

Ich empfehle, SYSOUT und SYSERR über den rsyncBefehl mit >bzw. umzuleiten 2>. Wenn Sie überhaupt nicht interessiert sind, leiten Sie die Ausgabe an um /dev/null.

Jos
quelle
Wie würde ich es in ein Protokoll drucken lassen, anstatt zu versuchen, es zu verschicken?
Hanny
sudo rsync -av --delete /directory1 /directory2 > /log/file 2> /log/errors. Verwenden Sie vollständige Pfadnamen zu den Protokolldateien. Wenn Sie möchten, dass regelmäßige Ausgaben und Fehler in derselben Datei landen, geben Sie > /log/file 2>&1denselben Dateinamen nicht zweimal an , sondern angeben.
Jos
Großartig, danke. Muss etwas Seltsames in meinem Cronjob sein, dann führt dies dazu, dass sie nicht wirklich beendet werden (obwohl ich keine anderen Fehler in den Protokollen als den MTA-Fehler sehe); Ich sehe die "kopierten" Dateien nicht.
Hanny
Wenn Sie das -vFlag verwenden, rsyncsollten Sie etwas über die Anzahl der gesendeten / empfangenen Bytes, die Übertragungsgeschwindigkeit usw. angeben. Dies sollte sich am Ende der Protokolldatei befinden. Wenn dies der Literalbefehl ist, rsyncwird ein Verzeichnis /directory2/directory1mit dem Inhalt des Originals erstellt directory1.
Jos
Es wird täglich ausgeführt - also werde ich es so einstellen, dass es der Protokolldatei Bericht erstattet und es ausführt. In den vorhandenen Protokolldateien scheint es ausgeführt zu werden, aber wenn ich in das Verzeichnis gehe, in dem ich die Dateien finden soll, ist es leer.
Hanny