44 votos

Cómo obtener el correo electrónico de la (fallida) cron puestos de trabajo en Ubuntu?

Puedo crear cron puestos de trabajo en Ubuntu por poner el ejecutable en una de /etc/cron.{daily,hourly,monthly,weekly}. Hay un montón de directorios de inicio con cron:

kent@rat:~$ ls -ld /etc/cron*
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.d
drwxr-xr-x 2 root root 4096 2009-07-16 13:17 /etc/cron.daily
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.hourly
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.monthly
-rw-r--r-- 1 root root  724 2009-05-16 23:49 /etc/crontab
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.weekly

Me gustaria recibir e-mail de mi secuencias de comandos cuando:

  1. Una secuencia de comandos de falla y le da un código de salida distinto de cero.
  2. El script tiene algo que decirme

He SSMTP instalado y funcionando, yo envío a mi correo desde mi Google-cuenta. El hecho de que SSMTP sólo puede enviar correo con una cuenta no es un problema para mí. Es sólo un servidor en casa y los usuarios que tengo no tiene la capacidad de agregar los trabajos cron.

Me gustaría saber cómo el envío de secuencias de comandos normalmente funciona en Linux/Unix en general y Ubuntu en particular. También me gustaría saber de una buena manera para mí para conseguir mails en las dos situaciones anteriores.

58voto

David Pokluda Puntos 4284

Por defecto, cron enviará por correo electrónico al propietario de la cuenta en la que el crontab se está ejecutando.

Todo el sistema de crontab se encuentra en /etc/crontab se ejecuta bajo el usuario `root'

Porque la root es utilizada ampliamente, me gustaría recomendar la adición de un alias de root a su /etc/aliases archivo de todos modos. (run 'newaliases' después)

La forma normal de la estructura de este es para root para que sea un alias a otro usuario en el sistema, por ejemplo, para mí me gustaría alias 'root' a 'phil' (mi cuenta de usuario) y alias 'phil' a mi dirección de correo electrónico externa.

Si usted tiene un usuario específico cron que quieras por correo electrónico a usted en la salida, puede utilizar /etc/aliases de nuevo (siempre y cuando tengas acceso de superusuario) para redirigir al usuario a otra dirección de correo electrónico, o puede utilizar el siguiente en la parte superior de su crontab:

MAILTO="email@domain.com"

Si el correo debe ser enviado a un usuario local, usted puede simplemente poner el nombre de usuario en lugar de:

MAILTO=someuser

Si necesita más información, consulte crontab(5) ejecutando:

man 5 crontab

28voto

Theozaurus Puntos 241

Con el fin de obtener el correo electrónico enviado desde vixie cron tendrá algo que replica el comando sendmail. Para la instalación de postfix o SSMTP se ordenará a esta parte. Si el uso de postfix, a continuación, el alias de archivo puede ser usado para asignar los usuarios del sistema real direcciones de correo electrónico.

La adición de MAILTO="foo@bar.com" a la parte superior de un crontab provocará la salida de la tarea en el cron para ser enviado por correo electrónico. Esto es independientemente de código de error.

Para secuencias de comandos que los errores de salida correctamente en STDERR, a continuación, es fácil llegar por correo electrónico sólo cuando van mal solo hacer esto:

MAILTO="foo@bar.com"
0 5 * * * /bin/some_script > /dev/null

Esto redirigirá sólo el STDOUT a null. Si cualquier STDERR mensajes que recibirá por correo electrónico a usted.

Sin embargo, he encontrado algunos scripts de errores de salida incorrectamente como STDOUT y establecer el código de salida 1. No he de encontrar una manera para tomar la salida de estos, pero ignorar la salida si el código de salida es 0. El único método que se me ocurre es para redirigir la salida a un archivo, a continuación, si el código de salida no es 0 de salida que el archivo de cron para agarrar. Parece bastante horrible, aunque.

8voto

Dan Carley Puntos 17278

Si desea enviar todos los de salida (stdout y stderr) a una dirección específica, a continuación, puede utilizar el MAILTO variable. Por ejemplo, coloque lo siguiente en la parte superior de la secuencia de comandos.

MAILTO="address@example.com"

5voto

Daniel P Puntos 180

trate de añadir "de la root: your@email.address" a /etc/aliases

que va a enviar todos los mensajes de ese usuario a su correo electrónico. si usted no desea que todos los mensajes, puede crear un usuario específico para esta.

Mientras la secuencia de comandos de salidas de algo, usted recibirá un correo electrónico.

2voto

Ari Puntos 156

No creo que SSMTP es lo que usted necesita hacer. Usted necesita algo que puede "recibir" el correo desde el cron de los procesos y, a continuación, enviarlo a tu buzón real.

Puedo usar Sendmail, pero eso es porque soy un viejo Sol de la mano; sé que se pone a reír a todos los chicos cool de estos días que utilizar Postfix. Su comunidad de ubuntu puede guiar con la configuración de tu sistema de correo.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: