Cómo modificar un asunto de correo electrónico de Cronjob


49

Estoy ejecutando media docena de trabajos cron diferentes desde mi hosting en Hostmonster.com. Cuando se ha ejecutado un cronjob, recibo un correo electrónico con la salida del script.

El correo electrónico viene en el formato de:

De: Cron Daemon
Asunto: Cron / ramdisk / bin / php5 -c /home5/username/scheduled/optimize_mysql.bash

El problema con esto es que el asunto del correo electrónico hace que sea muy difícil leer a qué cronjob pertenece el correo electrónico.

¿Hay alguna manera de modificar el asunto de un correo electrónico de cronjob para que sea más fácil de leer?

Por ejemplo:

De: Cron Daemon
Asunto: Optimizar la base de datos MySQL

Respuestas:


11

En mis sistemas (la mayoría de Debian) toda la salida, desde un script / programa llamado como crontab-entry, se envía por correo electrónico a account@localhostquien inició el cron. Estos correos electrónicos tienen un asunto como el tuyo.

Si desea recibir un correo electrónico, escriba un script que no tenga salida por sí solo. Pero en su lugar, coloque todos los resultados en un archivo de texto.

Y con

mail -s 'your subject' adress@where < textfile

lo recibes de la manera que quieras.


Gracias Michèle Esperaba usar el sistema de correo electrónico automático de Hostmonster, pero parece que esta será la solución con la que iré. En lugar de recibir correos electrónicos de Cron automáticos controlados por mi hosting, simplemente enviaré mis propios correos electrónicos.
justinl

54

O use el comando sh noop (:)

0 9-17 * * 1-5    : Queue Summary; PATH=/usr/sbin qshape

El tema todavía se ve kludgey, pero al menos es descriptivo y no requiere scripts extraños.


44
Ahora que es un truco! (Me gusta.)
Maxy-B

8
Tenga en cuenta que el espacio es importante después de los dos puntos.
Patrick olvida

1
¿El título va a ser "Resumen de cola"? ¿Y es el comando "qshape" en este caso?
Pratik Khadloya

Parece que qshape es un comando postfix. Mi máquina Unix usa el comando "mail". Pero, ¿es relevante el comando qshape aquí?
Pratik Khadloya

1
Para su información, el asunto del correo electrónico seráQueue Summary; PATH=/usr/sbin qshape
Akom

20

Canalice la salida de su trabajo cron directamente al correo, y luego puede completar la línea de asunto. la 2>&1sintaxis envía cualquier salida de error que de otra forma desaparecería.

mycmd 2>&1 | mail -s "mycmd output" myname

2
Estoy haciendo esto, pero interno a las llamadas cron del script porque quiero que el tema refleje el éxito o el fracaso del script que se está ejecutando.
Tom Barron

13

Asuma la responsabilidad de crond de enviar la salida del comando (o no si no hay ninguna) canalizando la salida y stderr en 'mailx -E'. Por ejemplo:

0 * * * * your-command 2>&1 | mailx -E -s "Descriptive Subject" $LOGNAME

La opción '-E' de Mailx es buena porque, al igual que crond, no enviará un correo si no hay salida para enviar.


1
¿Cuál es la variable $ LOGNAME aquí?
Pratik Khadloya

¿Hay alguna forma de enviar un correo electrónico solo cuando el código de salida del comando no es cero?
Pratik Khadloya

1
@PratikKhadloya, de crontab (5): Several environment variables are set up automatically by the cron(8) daemon. SHELL is set to /bin/sh, and LOGNAME and HOME are set from the /etc/passwd line of the crontab's owner. PATH is set to "/usr/bin:/bin". HOME, SHELL, and PATH may be overridden by settings in the crontab; LOGNAME is the user that the job is running from, and may not be changed.
lingfish

2
Hay múltiples mailximplementaciones; solo algunos de ellos ofrecen esta -Eopción. En Ubuntu quieres los paquetes bsd-mailxo heirloom-mailx; el mailutilspaquete contiene un mailxcomando Gnu con un diferente -E.
Smylers

2

Otra solución es escribir un script de shell con la línea de asunto que desee que llame al comando correcto. En su ejemplo, esto sería:

#Optimize_MySQL_Database.sh

/ramdisk/bin/php5 -c /home5/username/scheduled/optimize_mysql.bash

Puede incluir su directorio bin en la ruta configurándolo en el archivo crontab.


0

PRUEBE ESTO: en la línea de comando, implemente el siguiente código ---

/usr/local/bin/php -q /path /hostname/foldername/Page-You-want-to-execute \
   | **mail -s "*SUBJECT*" YOUR@MAIL.COM.**
  • Esto es solo una referencia para guiarte
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.