62 votes

Comment modifier l'objet d'un courriel de Cronjob ?

J'exécute une demi-douzaine de tâches cron différentes depuis mon hébergement chez Hostmonster.com. Lorsqu'une tâche cron a été exécutée, je reçois un courriel contenant le résultat du script.

L'e-mail se présente sous le format suivant :

From: Cron Daemon
Subject: Cron  /ramdisk/bin/php5 -c /home5/username/scheduled/optimize\_mysql.bash

Le problème est que l'objet de l'e-mail ne permet pas de savoir à quel cronjob il se rapporte.

Existe-t-il un moyen de modifier l'objet d'un e-mail de cronjob afin qu'il soit plus facile à lire ?

Par exemple :

From: Cron Daemon
Subject: Optimize MySQL Database

67voto

Ou utilisez la commande sh noop ( :)

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

Le sujet a toujours l'air compliqué, mais au moins il est descriptif et ne nécessite pas de scripts superflus.

28voto

DrPizza Points 9355

Transmettez directement la sortie de votre tâche cron au courrier électronique, puis remplissez la ligne d'objet. 2>&1 envoie toute sortie d'erreur qui, autrement, disparaîtrait.

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

14voto

Michèle Points 340

Sur mes systèmes (la plupart des Debian), toutes les sorties d'un script/programme appelé en tant qu'entrée crontab, sont envoyées par courriel à l'adresse account@localhost qui a initié le cron. Ces emails ont un sujet comme le vôtre.

Si vous voulez recevoir un courriel, écrivez un script qui n'a pas de sortie propre. Mais à la place, mettez toute la sortie dans un fichier texte.

Et avec

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

vous le recevez comme vous le souhaitez.

14voto

Alexis Huxley Points 151

Prenez la responsabilité de crond pour envoyer la sortie de la commande (ou pas s'il n'y en a pas) en mettant la sortie et le stderr dans 'mailx -E'. Par exemple :

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

L'option '-E' de Mailx est intéressante car, tout comme crond lui-même, il n'enverra pas de courrier s'il n'y a pas de sortie à envoyer.

2voto

Une autre solution consiste à écrire un Shell Shell avec la ligne d'objet que vous voulez qui appelle la bonne commande. Dans votre exemple, ce serait :

#Optimize_MySQL_Database.sh

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

Vous pouvez inclure votre répertoire bin dans le chemin en le définissant dans le fichier crontab.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X