/etc/cron.daily/foo: Envoyer un e-mail à un utilisateur particulier au lieu de root?

13

J'utilise CentOS 5.5.

Nous avons plusieurs tâches cron stockées dans /etc/cron.daily/. Nous aimerions que l'e-mail pour certains de ces cronjobs soit envoyé à une adresse e-mail particulière, tandis que le reste des e-mails dans /etc/cron.daily/ devrait aller à l'adresse e-mail par défaut (root @ localhost).

Les tâches cron dans /etc/cron.daily/ sont exécutées à partir du fichier / etc / crontab. / etc / crontab spécifie un champ 'MAILTO'. Puis-je remplacer cela en définissant MAILTO dans mon cronjob /etc/cron.daily/foo?

Quelle est la meilleure façon de gérer cela?

Stefan Lasiewski
la source
Remarque pour les utilisateurs de CentOS 6.5 (cronie): /etc/crontabne spécifie pas les valeurs par défaut.
Adam Monsen

Réponses:

13

Réglage [email protected]en /etc/cron.daily/foone fonctionne pas. La sortie du script n'est pas envoyée à [email protected].

La page http://www.unixgeeks.org/security/newbie/unix/cron-1.html propose également une solution simple:

Le fichier /etc/cron.daily/foocontient désormais les éléments suivants:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" [email protected]

Cela enverra un e-mail à '[email protected]' avec le sujet qui est égal au chemin complet du script (par exemple /etc/cron.daily/foo).

Voici ce qu'en dit Unixgeeks.org:

Sortie de cron

Comme je l'ai déjà dit, la sortie de cron est envoyée au propriétaire du processus, ou à la personne spécifiée dans la variable MAILTO, mais que faire si vous ne le souhaitez pas? Si vous souhaitez envoyer la sortie à quelqu'un d'autre, vous pouvez simplement diriger la sortie vers la messagerie de commande. par exemple

cmd | mail -s Utilisateur "Objet du courrier"

Parfois, je veux seulement recevoir les erreurs d'un cronjob, pas de la sortie standard, donc j'utilise cette astuce. La syntaxe peut sembler fausse à première vue, mais soyez assuré que cela fonctionne. Le cronjob suivant enverra STDOUT à / dev / null, puis gérera STDERR via le pipeline.

doit 2>&1 >/dev/null | mailx -s "$0" [email protected]

Même chose, mais envoyez à syslog:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Voir également ma réponse sur ServerFault à Cronjob stderr pour déposer et envoyer un e-mail

Stefan Lasiewski
la source
6

Une solution plus élégante serait d'utiliser /etc/cron.ddirectement. Au lieu d'avoir votre script /etc/cron.daily, placez-le quelque part comme /usr/local/sbin/myscript.sh, puis créez le fichier /etc/cron.d/myscriptcomme:

MAILTO=root,[email protected]
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Cela vous donne également beaucoup plus de contrôle sur le moment où le travail se déroule; par exemple uniquement certains jours de la semaine, etc. Consultez l' crontab(5)homme pour plus d'informations.

codebeard
la source
0

En supposant que vous disposez d'un accès SA sur cette machine, vous pouvez créer un nouveau compte utilisateur, ajouter les tâches à ces tâches cron de comptes. Le courrier de cet utilisateur peut ensuite être transféré à l'aide d'un fichier .forward dans ce dossier d'accueil des comptes. Vous devrez peut-être configurer des autorisations pour cet utilisateur si les tâches cron nécessitent un accès privilégié.

Que ce soit la réponse de Stefan ou celle qui convient le mieux dépend vraiment de la quantité de tracas que vous voulez pour la configurer et si vous voulez que les messages d'erreur soient envoyés à l'e-mail racine ou aux personnes qui surveillent normalement la sortie quotidienne.

Bonne chance

Michael Shaw
la source