Comment modifier un sujet d'e-mail Cronjob


50

J'exécute une demi-douzaine de tâches cron différentes à partir de mon hébergement chez Hostmonster.com. Quand un cronjob a été exécuté, je reçois un email avec la sortie du script.

L'email vient dans le format de:

De: Cron Daemon
Sujet: Cron / disque mémoire / bin / php5 -c /home5/username/scheduled/optimize_mysql.bash

Le problème avec ceci est que le sujet de l'email rend très difficile de savoir à quel cronjob appartient l'email.

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

Par exemple:

De: Cron Daemon
Objet: Optimiser la base de données MySQL

Réponses:


11

Sur mes systèmes (la plupart des Debian), toutes les sorties, d’un script / programme appelé crontab-entry, sont envoyées par courrier électronique à account@localhostqui a initié le cron. Ces courriels ont un sujet comme le vôtre.

Si vous souhaitez recevoir un courrier électronique, écrivez un script qui ne comporte pas de sortie. Mais placez plutôt toutes les sorties dans un fichier texte.

Et avec

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

vous le recevez comme vous le souhaitez.


Merci Michèle. J'espérais utiliser le système de messagerie automatique de Hostmonster, mais il semble que ce sera la solution à laquelle je vais. Au lieu de recevoir des courriels Cron automatiques contrôlés par mon hébergement, je vais simplement envoyer mes propres courriels.
Justinl

54

Ou utilisez la commande sh noop (:)

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

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


4
Maintenant c'est un bidouillage! (J'aime ça.)
Maxy-B

8
Notez que l'espace est important après les deux points.
Patrick Forget

1
Le titre va-t-il être "Résumé de la file d'attente"? Et la commande "qshape" est-elle dans ce cas?
Pratik Khadloya

On dirait que qshape est une commande postfixe. Ma machine unix utilise la commande "mail". Mais la commande qshape est-elle pertinente ici?
Pratik Khadloya

2
Pour votre information, l'objet de l'e-mail seraQueue Summary; PATH=/usr/sbin qshape
Akom

21

Dirigez directement le résultat de votre travail cron vers le courrier, puis vous pouvez renseigner la ligne de sujet. la 2>&1syntaxe envoie toute sortie d'erreur qui sinon disparaîtrait.

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

2
Je le fais, mais à l'intérieur du script cron appelle, car je veux que le sujet reflète le succès ou l'échec du script en cours d'exécution.
Tom Barron

13

Assumer la responsabilité de l'envoi de la sortie de la commande par crond (ou non s'il n'y en a pas) en transmettant la sortie et 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, elle n'enverra pas de courrier s'il n'y a pas de sortie à envoyer.


1
Quelle est la variable $ LOGNAME ici?
Pratik Khadloya

Est-il possible d'envoyer un courrier électronique uniquement lorsque le code de sortie de la commande est différent de zéro?
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.
Poisson

2
Il y a plusieurs mailximplémentations; seuls certains d'entre eux offrent cette -Eoption. Sur Ubuntu, vous voulez les packages bsd-mailxou heirloom-mailx; le mailutilspaquet contient une mailxcommande Gnu avec un autre -E.
Smylers

2

Une autre solution consiste à écrire un script shell avec la ligne d'objet souhaitée, 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.


0

ESSAYEZ CECI - Dans la ligne de commande, implémentez le code suivant ---

/usr/local/bin/php -q /path /hostname/foldername/Page-You-want-to-execute \
   | **mail -s "*SUBJECT*" YOUR@MAIL.COM.**
  • Ceci est juste une référence pour vous guider
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.