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
justinl
fuente

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.

Michèle
fuente
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.


fuente
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
Mark Harrison
fuente
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.

Alexis Huxley
fuente
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.

EEAA
fuente
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*" [email protected].**
  • Esto es solo una referencia para guiarte
sudhu
fuente