Como desabilitar a saída enviada por correio para um trabalho at?

Como desabilitar a saída enviada por correio para um trabalho at?

Gostaria de desativar atas 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 MAILe MAILTOnão tiveram nenhum efeito óbvio. Pensei que poderia editar o trabalho para remover a # maildiretiva, 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) ate também vintages derivados do Debian (como rpm -qi atno RedHat indica uma URL do Debian, e também derobert nos comentários acima) devem suportar uma -Mopçã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 loggerou 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/nullum arquivo de caixa de correio em algum lugar do servidor de desenvolvimento, mas isso dá mais trabalho.

Responder2

Preceda o comando passado atcom chronic(do moreutilspacote) 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.

informação relacionada