Как отключить отправку выходных данных по почте для задания?

Как отключить отправку выходных данных по почте для задания?

Я хотел бы отключить atуведомления по почте для определенного класса заданий. Например, при тестировании варианта использования ниже (уничтожение задания в середине потока) яненужен вывод, но тот же код в продакшене мне нужен отправленный по почте вывод:

$ 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

Я знаю, что могу задать MAILPATH=/dev/null, но я бы предпочел иметь более тонкий контроль. Установка MAILи MAILTOне имела очевидного эффекта. Я думал, что могу отредактировать задание, чтобы удалить директиву # mail, но это, похоже, не работает:

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

Я искал везде и всюду, но, скажем так, поиск команды с именем at — нетривиальная задача. Я даже не могу найти исходный код at: разве он не в GNU coreutils?

ОБНОВЛЯТЬ: Идентификация станции:

$ 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

Можно ли контролировать, отправляются ли выходные данные (любые выходные данные) по почте отправившему их пользователю для каждого задания?

решение1

RedHat (и, следовательно, Centos и его друзья), atа также производные от Debian версии (как rpm -qi atуказано в RedHat, URL-адрес Debian, а также derobert в комментариях выше) должны поддерживать опцию -M:

    -M      Never send mail to the user.

При отсутствии этого варианта другим вариантом будет подавление вывода из задания:

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

Или вместо этого перенаправьте вывод в loggerфайл журнала или в файл журнала на случай, если вывод действительно необходимо проверить.

Еще одним вариантом было бы изменение агента почтовой транспортировки, особенно с учетом того, что это системы разработки, и помещение всей почты /dev/nullв файл почтового ящика где-нибудь на сервере разработки, но это требует больше работы.

решение2

Перед командой, переданной atв chronic(из moreutilsпакета), вы все равно получитеобаstderr и stdout, если команда завершилась со статусом ошибки, в противном случае ничего.

Сделайте то же самое с заданиями cron, пока вы ими заняты.

Связанный контент