
Gostaria de desativar at
as notificações por email para uma determinada classe de trabalhos. Por exemplo, ao testar o caso de uso abaixo (eliminar um trabalho no meio do caminho), eunãoquero a saída, mas o mesmo código em produção eu quero a saída enviada por correio:
$ 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
Eu sei que posso definir MAILPATH=/dev/null
, mas prefiro ter um controle mais refinado. Configuração MAIL
e MAILTO
não tiveram nenhum efeito óbvio. Pensei que poderia editar o trabalho para remover a # mail
diretiva, mas parece que não funciona:
at 15:15 <<<'date'
at -c 73 | grep -v '^# mail bishop' | at 15:15
atrm 73
Eu pesquisei de cima a baixo, mas digamos apenas que procurar por um comando chamado at não é trivial. Não consigo nem encontrar o código-fonte: não está no GNU coreutils?
ATUALIZAR: Identificação da estação:
$ 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
É possível controlar, por trabalho, se a saída - qualquer saída - é enviada ao usuário remetente?
Responder1
O RedHat (e, portanto, Centos e amigos) at
e também vintages derivados do Debian (como rpm -qi at
no RedHat indica uma URL do Debian, e também derobert nos comentários acima) devem suportar uma -M
opção:
-M Never send mail to the user.
Na falta disso, outra opção seria suprimir a saída do trabalho:
#!/bin/bash
exec >/dev/null 2>&1
... the usual job commands here ...
Ou, em vez disso, canalize a saída para logger
ou para um arquivo de log, caso a saída precise ser inspecionada.
Outra opção seria alterar o agente de transporte de correio, especialmente porque se trata de sistemas de desenvolvimento, e descartar todos os correios em /dev/null
um arquivo de caixa de correio em algum lugar do servidor de desenvolvimento, mas isso dá mais trabalho.
Responder2
Preceda o comando passado at
com chronic
(do moreutils
pacote) para que você ainda obtenhaambosstderr e stdout, se o comando saiu com status de erro, caso contrário, nada.
Faça o mesmo com seus cron jobs enquanto estiver fazendo isso.