web-dev-qa-db-fra.com

/etc/cron.daily/foo: envoyez un courrier électronique à un utilisateur particulier au lieu de root?

Je cours Centos 5.5.

Nous avons plusieurs cronjobs stockés dans /etc/cron.daily/. Nous aimerions que l'e-mail de certains de ces cronjobs accède à une adresse électronique particulière, tandis que le reste des courriels dans /etc/cron.daily/ devrait aller à l'adresse électronique par défaut (root @ localhost).

Cronjobs dans /etc/cron.daily/ est exécuté à partir du fichier/etc/crontab./etc/crontab spécifie un champ "Mailto". Puis-je remplacer cela en définissant mailto dans mon /etc/cron.daily/foo cronjob?

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

13
Stefan Lasiewski

Réglage [email protected] Dans /etc/cron.daily/foo Ne fonctionne pas. La sortie de script n'est pas envoyée à [email protected].

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

Le fichier /etc/cron.daily/foo Contient maintenant les éléments suivants:

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

Cela enverra un courrier électronique à '[email protected]' avec le sujet qui est égal au chemin complet du script (E.g. /etc/cron.daily/foo).

Voici ce que Unixgeeks.org dit à ce sujet:

sortie de cron

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

cmd | Mail -s "Sujet de courrier" utilisateur

Parfois, je veux seulement recevoir les erreurs d'un cronjob, pas le stdout, alors j'utilise ce truc. La syntaxe peut sembler mal au premier coup d'œil, mais soyez assuré que cela fonctionne. Le cronjob suivant enverra STDOUT à/dev/null et gérera ensuite STDRER via le pipeline.

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

Même chose, mais envoyer à Syslog:

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

Voir également ma réponse sur Serverfault à Cronjob stardr to File and Email

13
Stefan Lasiewski

Une solution plus élégante serait d'utiliser directement /etc/cron.d Directement. Au lieu d'avoir votre script dans /etc/cron.daily, Mettez-le quelque part comme /usr/local/sbin/myscript.sh, Puis créez le fichier /etc/cron.d/myscript Comme:

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 lorsque le travail arrive; Par exemple, seuls les jours de la semaine, etc. Voir le crontab(5) Man pour plus d'informations.

6
codebeard

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

Que ce soit à ce que ce soit la réponse de Stefan, le mieux dépend vraiment de la quantité de tracas que vous souhaitez dans la configuration et de savoir si vous souhaitez que des messages d'erreur se rendent à l'e-mail racine ou aux personnes qui surveillent normalement la sortie quotidienne.

Bonne chance

0
Michael Shaw