Sur mon Ubuntu-Desktop et sur mon serveur Debian, j'ai un script qui doit être exécuté à la minute (un script qui appelle la minute de mon navigateur en ligne ).
Le problème est que sur les dérivés debian, cron enregistre /var/log/syslog
chaque fois qu’il s’exécute. Je finis par voir répéter le message, il a été exécuté à plusieurs reprises dans /var/log/syslog
:
Nov 11 16:50:01 eclabs /USR/SBIN/CRON[31636]: (root) CMD (/usr/bin/w3m -no-cookie http://www.spacetrace.org/secret_script.php > /dev/null 2>&1)
Je sais que pour supprimer la sortie d'un programme, je peux le rediriger vers /dev/null
, par exemple pour masquer tous les messages d'erreur et d'avertissement d'un programme, je peux créer une ligne dans crontab comme celle-ci.
* * * * * root /usr/local/sbin/mycommand.sh > /dev/null
Mais je voudrais exécuter un travail cronjob et m'assurer que toutes les sorties générées ou les erreurs sont dirigées vers NULL, de sorte que cela ne génère aucun message dans syslog et ne génère aucun email.
EDIT:
il existe une solution pour rediriger les journaux cron dans un journal séparé comme proposé ici en modifiant/etc/syslog.conf
Mais l’inconvénient est que TOUTES les sorties de tous les cronjobs sont redirigées.
Puis-je en quelque sorte rediriger un seul travail cron dans un fichier journal séparé? De préférence, configurable à l'intérieur du cron.hourly
fichier lui-même.
la source
MAILTO=""
au début du fichier cron. Cela supprimera tous les emails. Et je n’ai jamais entendu parler d’un démon cron qui envoie la sortie du travail à syslog (mais j’imagine que c’est possible).MAILTO=""
comme la 1ère ligne de la crontab empêchera tout email. En outre, utilisez le trifecta complet sur vos lignes de commande si vous supprimez toutes les sorties. Les 3 types sont redirigés par cette chaîne:>/dev/null 2>&1
- Bien sûr, vous pouvez avoir le script inclut des écritures périodiques dans un journal séparé.Réponses:
Faites la ligne ceci:
Cela capturera à la fois STDOUT (1) et STDERR (2) et les enverra à
/dev/null
.MAILTO
Vous pouvez également désactiver le courrier électronique en définissant, puis en réinitialisant le
MAILTO=""
qui désactivera l'envoi de courriers électroniques.Exemple
Messagerie supplémentaire
Souvent, vous recevez les types de messages suivants
/var/log/syslog
:Ce sont simplement des notifications via cron qu'un répertoire de cronjobs a été exécuté. Ce message n'a rien à voir directement avec ces travaux, mais provient
crond
directement du démon. Vous ne pouvez rien y faire, et je vous encourage à ne pas les désactiver, car ils sont probablement la seule fenêtre sur laquelle vous avez accèscrond
via les journaux.S'ils vous ennuient beaucoup, vous pouvez toujours les diriger vers un fichier journal alternatif pour les extraire de votre
/var/log/syslog
fichier, via le/etc/syslog.conf
fichier de configuration desyslog
.la source
/etc/syslog.conf
, je considérerais difficilement cela comme une alternative. Cela changera simplement le fichier dans lequel les journaux seront vidés ou vous pourrez complètement désactiver les messages cron tous ensemble. Il n'y a pas moyen de faire ce que vous voulez.grep -v ...
après l’invocation ducrond
.Puisque rien ne vous semble arrêter cela, il faut se demander: qu'est - ce exactement est ce script et ce exactement est le message que vous voyez dans syslog?
Si la suggestion de slm n'a pas fonctionné, c'est que quelque chose se connecte directement à syslog - soit cron, comme cela semble être implicite dans certains de vos commentaires, ou bien le processus exécuté par cron. Les messages envoyés à syslog ne proviennent pas de stdin ou stderr, ils
2>&1&>
ne vous aideront donc pas.Il y aurait peut-être un moyen de configurer le comportement de l'application en question, sauf que nous ne savons pas ce que c'est.
Il existe certainement un moyen de configurer la plupart des implémentations syslog actuelles (il en existe plusieurs) pour filtrer les messages de manière très spécifique. Par exemple, si une balise unique est utilisée dans le message de journal, vous pouvez la cibler. Mais encore une fois, comme nous ne savons rien du message en question, ni du syslogd que vous utilisez, aucun élément spécifique ne peut être recommandé.
Mon argument général est que si vous ne voulez pas rediriger / filtrer les messages parce que "cela redirige tous les messages", vous pouvez alors affiner la technique de filtrage. Le thread de défaillance du serveur auquel vous vous êtes lié mentionne simplement le filtrage par facility (
*.cron
) - mais vous pouvez configurer des filtres plus spécialisés que cela.Rsyslog est disponible pour Debian et Ubuntu . Sous Debian 5+, c'est le syslog par défaut, sous ubuntu, c'est une option, vous devez donc l'installer. Pour créer un filtre qui cible un type de contenu spécifique, placez- le en haut (c'est-à-dire avant toute autre règle, mais après la configuration générale, le chargement du module, etc.) de
/etc/rsyslog.conf
. La meilleure façon de le faire est de ne pas éditer lersyslog.conf
fichier lui - même, mais de créer un fichier dans un/etc/rsyslog.conf.d/
répertoire, dont le nom commence par deux chiffres inférieurs à 50, c'est-à-dire/etc/rsyslog.conf.d/15-my-filter.conf
. Vous pouvez y mettre quelque chose comme ceci:Cela enverra le message à
/dev/null
(ou un journal séparé si vous préférez). Toutefois, le message sera toujours transmis aux règles suivantes qui l'envoient/var/log/syslog
. Pour empêcher cela:Immédiatement après cette autre ligne. Cela jette tout ce qui correspond à la règle précédente. Ou, pour les règles sur une seule ligne, vous pouvez simplement ajouter
stop
à la fin de cette ligne de règle.Vous devez redémarrer
rsyslogd
après avoir changé la configuration (par exemple sur des systèmes systemdsystemctl restart rsyslog
):HUP provoque le redémarrage du démon.
la source
~
est maintenant obsolète et doit être remplacé parstop
. La position dans lersyslogd.conf
fichier est également importante. Donc, pour rsyslog, je voudrais simplement utiliser:msg, contains, "/usr/bin/w3m -no-cookie" stop
. Et puis redémarrersudo systemctl restart rsyslog
.Changement
/etc/default/cron
Par défaut, la
EXTRA_OPTS
ligne est""
la source
Redirection pour
/dev/null
masquer la sortie de la commande. Si vous ne le faites pas, cron vous enverra la sortie par courrier électronique. La sortie de la commande ne finit jamais dans les journaux du système (du moins pas par le travail de cron).Il est généralement déconseillé de rediriger la sortie
/dev/null
, en particulier la sortie d'erreur: en cas de problème, vous ne disposerez d'aucune information pour diagnostiquer le problème. Si vous ne souhaitez pas recevoir de courrier, redirigez-le vers un fichier journal.Toutefois, rien de tout cela n’est pertinent pour votre problème. Le message que vous citez provient de cron lui-même. Cron écrit une entrée de journal chaque fois qu'il exécute un travail. Aucune implémentation cron que j'ai vue ne vous permet d'utiliser différentes configurations de journalisation pour différents travaux.
Si vous souhaitez omettre certaines tâches, votre seule option consiste à appliquer un filtrage de texte aux messages de journal du démon syslog. La norme de facto pour le filtrage syslog consiste à exécuter rsyslog (qui peut ou non être la valeur par défaut sur votre système) en tant que démon syslog. Voir la réponse de goldilocks pour savoir comment filtrer cette commande particulière.
la source