Cron stoppen, der Post für Unterstützungsskript sendet?

13

Ich habe ein Backup-Skript eingerichtet, um stündlich mit cron Weltdaten auf meinem Minecraft-Server zu sichern. Da die Welten jedoch ständig von Spielern bearbeitet werden, hat tar mir mitgeteilt, dass sich die Dateien während des Lesens geändert haben. Ich habe --ignore-command-error zum tar im Skript hinzugefügt und dies unterdrückt alle Fehler, wenn ich es manuell ausführe. Cron sendet jedoch weiterhin eine E-Mail-Nachricht, die besagt, dass Dateien während des Lesens geändert wurden, und überflutet am Ende meine E-Mails, da dies der Fall ist einmal pro stunde laufen. Weiß jemand, wie man das behebt? Dies ist das Skript:

filename=$(date +%Y-%m-%d)
cd /home/minecraft/Server/
for world in survival survival_nether survival_the_end creative superflat
do
if [ ! -d "/home/minecraft/backups/$world" ]; then
mkdir /home/minecraft/backups/$world
fi
find /home/minecraft/backups/$world -mtime +1 -delete
tar --ignore-command-error -c $world/ | nice -n 10 pigz -9 > /home/minecraft/backups/$world/$filename.tar.gz
done
Fuhrmann
quelle

Antworten:

22

Cron versucht, eine E-Mail mit allen Ausgaben zu senden, die möglicherweise bei der Ausführung des Befehls aufgetreten sind. Aus crons Manpage:

Bei der Ausführung von Befehlen werden alle Ausgaben an den Eigentümer der crontab (oder an den in der Umgebungsvariablen MAILTO in der crontab angegebenen Benutzer, falls vorhanden) gesendet. Jede Jobausgabe kann auch mit der Option -s an syslog gesendet werden.

Um es für einen bestimmten crontab-Eintrag zu deaktivieren, erfassen Sie einfach alle ausgegebenen Befehle und leiten Sie es entweder an eine Datei oder an /dev/null.

30 * * * * notBraiamsBackup.sh >/dev/null 2>&1
slm
quelle
1
D: mit meinem Beispiel!
Braiam
@Braiam - Entschuldigung, ich fühlte mich faul und hatte keine Lust, es zu tippen. Ich hätte sowieso dasselbe geschrieben 8-).
SLM
@Braiam - ist das besser? 8-).
SLM
Funktioniert super, genau das, wonach ich gesucht habe.
Carter
Beachten Sie, dass in meinem CentOS 7, mit crontabnicht cron, -sMittel selinux context.....
WesternGun
13

Anstatt alles weiterzuleiten /dev/null(was dazu führen kann, dass Sie keine Ahnung haben, was passiert ist, wenn ein Fehler auftritt), können Sie Ihre Skripte weiterleiten, um Dateien wie diese zu protokollieren:

30 * * * * backup.sh > ~/logs/backup.log

MAILTOWenn Sie keine Mails mehr erhalten möchten, setzen Sie die Variable einfach am Anfang Ihrer crontab-Datei auf eine leere Zeichenfolge:

MAILTO=""
Enrico
quelle
4

Wenn Sie keine E-Mails für eine bestimmte Cron-Aufgabe wünschen, können Sie einfach >/dev/null 2>&1am Ende der Zeile Folgendes hinzufügen :

30 * * * * backup.sh >/dev/null 2>&1
Braiam
quelle
Ich wähle diesen Weg: Sie haben alles aus den Augen verloren, aber ordentlich.
WesternGun
0

Sie sollten Ihrem gnu tar- Befehl Folgendes hinzufügen : --warning = no-file-changed

Dadurch werden alle Nachrichten " % s: Datei wurde beim Lesen geändert " unterdrückt . Und wenn Sie diese Lösung verwenden (und nicht alles nach / dev / null umleiten), können Sie immer noch Fehlermeldungen erhalten, wenn wirklich etwas schief geht.


Mit dem --warning- Flag können Sie viele verschiedene Nachrichten, die tar druckt, aktivieren und deaktivieren . Hier ist der relevante Teil des Handbuchs mit allen Schlüsselwörtern, die Sie verwenden können: https://www.gnu.org/software/tar/manual/html_section/tar_27.html .

Hinweis: Durch Hinzufügen von " no- " vor einem Schlüsselwort wird die Nachricht unterdrückt.

Der stille Bootsmann
quelle