
Me gustaría desactivar at
las notificaciones por correo para una determinada clase de trabajos. Por ejemplo, cuando pruebo el siguiente caso de uso (eliminar un trabajo a mitad de camino),noQuiero salida, pero el mismo código en producción. Quiero la salida enviada por correo:
$ 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
Sé que puedo configurar MAILPATH=/dev/null
, pero preferiría tener un control más detallado. Ajuste MAIL
y MAILTO
no han tenido ningún efecto evidente. Pensé que podría editar el trabajo para eliminar la # mail
directiva, pero parece que no funciona:
at 15:15 <<<'date'
at -c 73 | grep -v '^# mail bishop' | at 15:15
atrm 73
He buscado por todas partes, pero digamos que buscar un comando llamado at no es trivial. Parece que ni siquiera puedo encontrar el código fuente: ¿no está en GNU coreutils?
ACTUALIZAR: Identificación de la estación:
$ 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
¿Es posible controlar, por trabajo, si el resultado (cualquier resultado) se envía por correo al usuario que lo envía?
Respuesta1
RedHat (y por lo tanto Centos y sus amigos) at
y también las versiones derivadas de Debian (como rpm -qi at
en RedHat indica una URL de Debian, y también derobert en los comentarios anteriores) deberían admitir una -M
opción:
-M Never send mail to the user.
A falta de esto, otra opción sería suprimir la salida del trabajo:
#!/bin/bash
exec >/dev/null 2>&1
... the usual job commands here ...
O, en su lugar, canalice la salida hacia logger
o hacia un archivo de registro en caso de que sea necesario inspeccionar la salida.
Otra opción más sería alterar el agente de transporte de correo, especialmente porque estos son sistemas de desarrollo, y colocar todo el correo en /dev/null
un archivo de buzón en algún lugar del servidor de desarrollo, pero eso es más trabajo.
Respuesta2
Preceda el comando pasado at
con chronic
(del moreutils
paquete) para que aún obtengaambosstderr y stdout, si el comando salió con un estado de error; de lo contrario, nada.
Haz lo mismo con tus trabajos cron mientras lo haces.