/etc/cron.daily/foo: ¿Enviar correo electrónico a un usuario en particular en lugar de root?

13

Estoy ejecutando CentOS 5.5.

Tenemos varios cronjobs almacenados en /etc/cron.daily/. Nos gustaría que el correo electrónico de algunos de estos cronjobs vaya a una dirección de correo electrónico en particular, mientras que el resto de los correos electrónicos en /etc/cron.daily/ deben ir a la dirección de correo electrónico predeterminada (root @ localhost).

Cronjobs en /etc/cron.daily/ se ejecutan desde el archivo / etc / crontab. / etc / crontab especifica un campo 'MAILTO'. ¿Puedo anular esto configurando MAILTO en mi /etc/cron.daily/foo cronjob?

¿Cuál es la mejor manera de manejar esto?

Stefan Lasiewski
fuente
Nota para los usuarios de CentOS 6.5 (cronie): /etc/crontabno especifica valores predeterminados.
Adam Monsen

Respuestas:

13

Establecer [email protected]en /etc/cron.daily/foono funciona. La salida del script no se envía a [email protected].

La página en http://www.unixgeeks.org/security/newbie/unix/cron-1.html también sugiere una solución simple:

El archivo /etc/cron.daily/fooahora contiene lo siguiente:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" [email protected]

Esto enviará un correo electrónico a '[email protected]' con el asunto que es igual a la ruta completa del guión (por ejemplo /etc/cron.daily/foo).

Esto es lo que dice Unixgeeks.org sobre esto:

Salida de cron

Como he dicho antes, la salida de cron se envía por correo al propietario del proceso, oa la persona especificada en la variable MAILTO, pero ¿qué pasa si no quieres eso? Si desea enviar la salida a otra persona, simplemente puede canalizar la salida al correo de comando. p.ej

cmd | mail -s "Asunto del correo" usuario

A veces, solo quiero recibir los errores de un cronjob, no el stdout, así que utilizo este truco. La sintaxis puede parecer incorrecta a primera vista, pero puede estar seguro de que funciona. El siguiente cronjob enviará STDOUT a / dev / null, y luego manejará STDERR a través de la canalización.

doit 2>&1 >/dev/null | mailx -s "$0" [email protected]

Lo mismo, pero enviar a syslog:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

También vea mi respuesta en ServerFault a Cronjob stderr para archivar y enviar por correo electrónico

Stefan Lasiewski
fuente
6

Una solución más elegante sería usar /etc/cron.ddirectamente. En lugar de tener su script /etc/cron.daily, colóquelo en algún lugar como /usr/local/sbin/myscript.shy luego cree el archivo /etc/cron.d/myscriptcomo:

MAILTO=root,[email protected]
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Esto también le da mucho más control sobre cuándo sucede el trabajo; por ejemplo solo en ciertos días de la semana, etc. Consulte al crontab(5)hombre para obtener más información.

código
fuente
0

Suponiendo que tiene acceso SA en esta máquina, puede crear una nueva cuenta de usuario, agregar las tareas a las tareas cron de esta cuenta. El correo para este usuario puede reenviarse utilizando un archivo .forward en la carpeta de inicio de esta cuenta. Es posible que tenga que configurar permisos para este usuario si las tareas cron requieren acceso privilegiado.

Si esto o la respuesta de Stefan se adaptan mejor realmente depende de la cantidad de problemas que desee para configurarlo y si desea que los mensajes de error vayan al correo electrónico raíz o a las personas que normalmente monitorean la salida diaria.

Buena suerte

Michael Shaw
fuente