Séparer ou filtrer les logs de CRON
Il est, à mon avis, utile d’avoir tous les logs des différentes cronjobs dans un fichier spécifique. Voici comment faire (sous Debian avec rsyslog).
Pré-requis
Syslog ou rsyslog
Notes
Soit “/var/log/cron.log
”, notre fichier dédié au logs des cron.
Etapes
Envoyer ce qui vient de CRON dans notre fichier dédié.
Editer le fichier “/etc/rsyslog.conf” pour y rajouter la ligne suivante :
cron.* -/var/log/cron.log
Elle indique que, les messages provenant de la facilité (facility) CRON (cron.*) doivent, quelque soit le niveau de gravité (severity) (cron.*), aller dans le fichier
/var/log/cron.log
.Sauf qu’il existe, d’autres messages générés par les cronjobs mais ne provenant pas de la facilité CRON
En effet, des ouvertures/fermetures de sessions sont faites pour pouvoir exécuter la tâche planifiée, or ces dernières proviennent de la facilité SECURITY et non pas de CRON.
Si l’on veut les rediriger vers notre fichier dédié, créer un fichier
/etc/rsyslog.d/20-cron.conf
contenant les lignes suivantes :# Intercepte les log venant de SECURITY de gravité INFO pour le SYSLOG CRON[...] if $syslogfacility-text == 'security' and $syslogseverity-text == 'info' and $syslogtag regexp 'CRON[0-9*]:' and ($msg contains 'pam_unix(cron:session): session opened for user ' or $msg contains 'pam_unix(cron:session): session closed for user ') then /var/log/cron.log
La deuxième ligne consiste en de simples vérifications sur :
- Le nom de la facilité (
$syslogfacility-text
) (« Est-ce “security” ? ») - La sévérité (
$syslogseverity-text
) (« Est-ce “info” ? ») - Le tag (
$syslogtag
) (« Commence-t-il par CRON avec quelques chiffres entre crochets ? ») - Le contenu du message (
$msg
) (« Parle-t-il d’une ouverture ou d’une fermeture de session ? »)
Et demande d’envoyer les messages satisfaisant les critères vers le fichier
/var/log/cron.log
.Vous remarquerez peut-être que ces modifications n’empêchent pas les messages générés par CRON d’aller se retrouver ailleurs, dans d’autres fichiers de log, comme “
/var/log/syslog
” par exemple.Si vous voulez qu’ils aillent exclusivement dans le fichier dédié il faut dire au logiciel rsyslog (dans mon exemple) de ne pas les envoyer ailleurs. Editer le fichier “/etc/rsyslog.conf” et chercher les lignes désignant les fichiers (ou autre types de destinations de log) dans lesquels vous ne voulez plus que les messages du CRON aillent. Exemple :
*.*;auth,authpriv -/var/log/syslog
Que l’on transforme en :
*.*;auth,authpriv,cron.none -/var/log/syslog
Rajouter
cron.none
à la droite du point-virgule (";") ignore les messages provenant de la facilité CRON (cron.none) et ayant n’importe quel niveau de sévérité (cron.none), ainsi ils n’iront pas dans le fichier “/var/log/syslog
”.Rouvrez le fichier “/etc/rsyslog.d/20-cron.conf” créé précédemment et ajouter y la ligne suivante après celle du point 2. :
if $syslogfacility-text == 'security' and $syslogseverity-text == 'info' and $syslogtag regexp 'CRON[0-9*]:' and ($msg contains 'pam_unix(cron:session): session opened for user ' or $msg contains 'pam_unix(cron:session): session closed for user ') then ~
Il s’agit de la même suite de vérifications (sur facilité, sévérité, tag et contenu du message) qu’auparavant, mais l’action, ici, est d’oublier le message (
then ~
).
- Le nom de la facilité (
Conclusion
Tout ce qui concerne l’exécution des cronjobs se retrouvera dans le fichier “/var/log/cron.log
” et nul part ailleurs.
Si vous aimez le contenu, vous pouvez aider
Sponsor