Como desabilitar a saída enviada para um trabalho em?

5

Gostaria de desativar as notificações de at mail para uma determinada classe de tarefas. Por exemplo, ao testar o caso de uso abaixo (matando um no meio do fluxo de trabalho) eu não quero saída, mas o mesmo código em produção eu quero a saída enviada:

$ 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. A configuração MAIL e MAILTO não teve nenhum efeito óbvio. Eu pensei em editar o trabalho para remover a diretiva # mail , mas parece que não funciona:

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

Eu pesquisei alto e baixo, mas digamos que pesquisar por um comando chamado não é trivial. Eu não consigo nem encontrar o código-fonte: não está no GNU coreutils?

UPDATE : 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 para o usuário final?

    
por bishop 16.05.2016 / 21:19

2 respostas

5

O RedHat (e, portanto, Centos e amigos) at e também as derivadas do Debian (como rpm -qi at no RedHat indica um URL do Debian e também derobert nos comentários acima) devem suportar a opção -M :

    -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, direcione a saída para logger ou para um arquivo de registro, caso a saída precise ser inspecionada.

Outra opção seria alterar o agente de transporte de mensagens, especialmente porque são sistemas de desenvolvimento, e soltar todos os emails em /dev/null ou em um arquivo de caixa de correio em algum lugar no servidor de desenvolvimento, mas isso é mais trabalho.

    
por 16.05.2016 / 23:07
0

Preceda o comando passado para at com chronic (do pacote moreutils ) para que você ainda obtenha ambos stderr e stdout, se o comando sair com um status de erro, caso contrário nada.

Faça o mesmo com seus trabalhos agendados enquanto estiver fazendo isso.

    
por 29.05.2017 / 03:14

Tags