
Я хотел бы отключить 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, пока вы ими заняты.