Cron peut-il écrire la sortie du travail dans un journal * par défaut * (au lieu du courrier)?

23

Nous savons tous que la bonne façon de gérer la sortie des tâches cron est de la rediriger vers un fichier:

0 * * * * /bin/date >> /var/log/date.log 2>&1

Cependant, les administrateurs sont parfois paresseux, oublieux ou ignorants et ne mettent pas ces redirections; dans ce cas, la sortie du travail est envoyée par mail à $ MAILTO ou à l'utilisateur propriétaire ou root. Sur certaines des boîtes que je gère, le courrier est désactivé, donc cette sortie va dans un trou noir. Ce que je me demande, est-il possible de dire à cron de prendre n'importe quelle sortie de travail et au lieu de la poster, de la jeter dans un fichier journal fourre-tout quelque part? J'utilise Ubuntu (8.04 mais migre vers 9.04). Il y a un indice d'une telle solution dans ce résultat aléatoire de Google , mais je pense que l'OP a peut-être été confondu entre la sortie cron et la sortie des tâches cron.

Je suis ouvert aux solutions qui impliquent un peu de script ou de piratage, mais idéalement, ce serait un bit de configuration que je pourrais définir quelque part. Je ne vois aucun indice man cron. Merci!

Brad
la source

Réponses:

1

Pour croniecron (qui est recommandé par exemple par Gentoo Handbook), il existe un argument "-s" pour l'appel cron, qui envoie la sortie du travail au journal système à l'aide de syslog.

Tomáš Diviš
la source
3

La réponse courte est non, cron envoie un mail au propriétaire du crontab par conception. Dans le cron standard, il n'y a aucun moyen de changer cela.

Le mieux que je puisse penser est de configurer les MTA sur les machines sur lesquelles vous souhaitez que ce comportement transfère le courrier dans un fichier journal au lieu d'une boîte aux lettres utilisateur.

Kamil Kisiel
la source
3

Je ne sais pas exactement ce que vous voulez dire lorsque vous dites "le courrier est désactivé". Mais peut-être pourriez-vous mettre en place un alias /etc/aliasesqui est dirigé vers un tuyau? Quelque chose comme

root: "|/bin/cat >> /var/log/cron.log"
innaM
la source
root: /var/log/cron.logne fonctionne pas? feep.net/sendmail/tutorial/intro/aliases.html
endolith
Moi non plus.
endolith
Ceux-ci peuvent uniquement fonctionner si vous exécutez sendmail en tant que votre MTA. Cela devient moins courant. (Oui je sais que je réponds à un commentaire de 5 ans!)
Alex L
2

Je ne pense pas que ce que vous demandez soit réellement possible avec Ubuntu (ou tout autre) cron.

Mis à part l'idée de geekmonkeys, vous pouvez également définir $ MAILTO sur un compte local et acheminer la sortie via procmail.

Adam
la source
1

Je n'ai jamais entendu parler d'un tel paramètre pour cron, donc je prendrais la route des scripts.

Créez un travail cron pour patrouiller / var / spool / cron / * et ajoutez la redirection à tout travail qui n'en a pas.

geekmonkey
la source
1

Une autre option serait de créer un script shell appelé cron_wrapper ou quelque chose, et de le faire faire comme ceci:

#! / bin / sh

eval "$ * >> /var/log/cronlog.log"
quitter $?

Ensuite, tous vos crontabs ont juste besoin de quelque chose comme ceci:

* * * * * / usr / local / bin / cron_wrapper echo bonjour

Remarque Je n'ai pas testé ce code, c'est juste une idée.

Justin Ellison
la source
1
Cela ne résout pas le problème. Si les gens ne se souviennent pas de définir MAILTO ou de rediriger stdout vers un fichier, ils ne se souviendront pas d'exécuter des trucs à travers le wrapper.
Kamil Kisiel
1

Je ne sais pas ce qu'est le "cron standard". Il existe de nombreux démons cron, différentes distributions en utilisent différentes. Vixie cron est le plus largement déployé, c'est donc probablement ce que vous vouliez dire. Mais sur certaines distributions, ce ne serait pas la valeur par défaut.

J'ai pris en charge le développement du cron de Dillon (dcron), qui est la valeur par défaut sur Arch Linux. D'autres distributions l'utilisent également, mais je ne sais pas si c'est la valeur par défaut ailleurs. dcron a une option d'invocation -Mpour spécifier que vous souhaitez utiliser un script personnalisé au lieu de sendmail. Le script est appelé sans arguments et avec quelques en-têtes de courrier électronique et la &>sortie de tous les cronjobs en tant que stdin. (S'il n'y a pas de &>sortie, le script n'est pas appelé.)

dubiousjim
la source
1

pourquoi ne définissons-nous pas MAILTO = "" dans la crontab de l'utilisateur en particulier. Cela désactivera la journalisation des messages électroniques dans / var / spool / mail /

lalit
la source