Wie deaktiviere ich die per E-Mail versendete Ausgabe für einen At-Job?

Wie deaktiviere ich die per E-Mail versendete Ausgabe für einen At-Job?

Ich möchte atE-Mail-Benachrichtigungen für eine bestimmte Klasse von Jobs deaktivieren. Wenn ich beispielsweise den folgenden Anwendungsfall teste (einen Job mittendrin beenden),nichtIch möchte eine Ausgabe, aber denselben Code in der Produktion. Ich möchte die per E-Mail gesendete Ausgabe:

$ at now <<<'/usr/bin/timeout 15s nc -l 20242'
job 71 at 2016-05-16 15:03
$ pidof /usr/bin/timeout
11853
$ kill 11853
$ mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/bishop": 1 message 1 new
>N  1 bishop@trencher  Mon May 16 15:03  16/920   "Output from your job       71"
& 1
Message  1:
From bishop@trencher  Mon May 16 15:03:30 2016
Date: Mon, 16 May 2016 15:03:30 -0400
From: bishop@trencher
Subject: Output from your job       71
To: bishop@trencher
Status: R

/bin/bash: line 1: 11853 Terminated              /usr/bin/timeout 15s nc -l 20242

Ich weiß, dass ich festlegen kann MAILPATH=/dev/null, aber ich hätte lieber eine feinere Kontrolle. Das Festlegen von MAILund MAILTOhatte keine offensichtliche Wirkung. Ich dachte, ich könnte den Job bearbeiten, um die # mailAnweisung zu entfernen, aber das scheint nicht zu funktionieren:

at 15:15 <<<'date'
at -c 73 | grep -v '^# mail bishop' | at 15:15
atrm 73

Ich habe überall gesucht, aber sagen wir einfach, die Suche nach einem Befehl namens at ist nicht trivial. Ich kann nicht einmal den at-Quellcode finden: Ist er nicht in den GNU-Coreutils enthalten?

AKTUALISIEREN: Stationsidentifikation:

$ uname -a
Linux trencher 4.4.8-20.46.amzn1.x86_64 #1 SMP Wed Apr 27 19:28:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ at -V
at version 3.1.10

Ist es möglich, pro Auftrag zu steuern, ob die Ausgabe – jegliche Ausgabe – an den übermittelnden Benutzer gesendet wird?

Antwort1

RedHat (und damit Centos und Freunde) atund auch von Debian abgeleitete Versionen (wobei rpm -qi atRedHat auf eine Debian-URL hinweist und auch derobert in den Kommentaren oben) sollten eine -MOption unterstützen:

    -M      Never send mail to the user.

Andernfalls besteht eine weitere Möglichkeit darin, die Ausgabe des Jobs zu unterdrücken:

#!/bin/bash
exec >/dev/null 2>&1
... the usual job commands here ...

Oder leiten Sie die Ausgabe stattdessen an loggeroder in eine Protokolldatei weiter, falls die Ausgabe überprüft werden muss.

Eine weitere Möglichkeit wäre, den Mail-Transport-Agenten zu ändern (insbesondere, da es sich um Entwicklungssysteme handelt) und alle Mails /dev/nullin eine Postfachdatei irgendwo auf dem Entwicklungsserver zu verschieben oder dort abzulegen. Dies ist jedoch mit mehr Arbeit verbunden.

Antwort2

atStellen Sie dem übergebenen Befehl chronic(aus dem moreutilsPaket) voran, damit Sie immer nochbeidestderr und stdout, wenn der Befehl mit einem Fehlerstatus beendet wurde, andernfalls nichts.

Machen Sie dasselbe mit Ihren Cron-Jobs, wenn Sie schon dabei sind.

verwandte Informationen