Au fil du temps, j'ai remarqué quelques journaux /var/log
tels que auth
, kern
et messages
devenaient énormes. J'ai fait des logrotate
entrées pour eux:
$ cat /etc/logrotate.d/auth.log
/var/log/kern.log {
rotate 5
daily
}
$ cat /etc/logrotate.d/kern.log
/var/log/kern.log {
rotate 5
daily
}
$ cat /etc/logrotate.d/messages
/var/log/messages {
rotate 5
daily
postrotate
/bin/killall -HUP syslogd
endscript
}
j'ai aussi l' compress
option activée:
$ grep compress /etc/logrotate.conf
# uncomment this if you want your log files compressed
compress
Cela fonctionne très bien pour auth.log
, kern.log
et d'autres, ce qui signifie que chacun de ces journaux est compressé et tourné, avec les 5 derniers jours de journaux conservés. /var/log/messages
n'est cependant pas compressé, ce qui entraîne plus de 5 jours de journaux:
$ ls /var/log/messages*
/var/log/messages /var/log/messages-20100213
/var/log/messages-20100201 /var/log/messages-20100214
/var/log/messages-20100202 /var/log/messages-20100215
/var/log/messages-20100203 /var/log/messages-20100216
/var/log/messages-20100204 /var/log/messages-20100217
/var/log/messages-20100205 /var/log/messages-20100218
/var/log/messages-20100206 /var/log/messages-20100219
/var/log/messages-20100207 /var/log/messages-20100220
/var/log/messages-20100208 /var/log/messages-20100221
/var/log/messages-20100209 /var/log/messages-20100222
/var/log/messages-20100210 /var/log/messages-20100223
/var/log/messages-20100211 /var/log/messages-20100224
/var/log/messages-20100212
Comme expliqué dans une autre logrotate
question sur ServerFault , les anciens journaux ne sont (probablement) pas supprimés car les fins de fichier sont différentes pour chaque fichier. Cela semble être dû au fait que les fichiers ne sont pas compressés.
Que puis-je faire pour avoir /var/log/messages
compressé et tourné avec les 5 derniers jours de journaux conservés comme tous mes autres fichiers journaux? Qu'est-ce que je rate?
EDIT 1 : informations supplémentaires demandées dans les premières réponses du couple.
J'utilise Gentoo Linux. Mon /etc/logrotate.conf
dossier:
$ cat /etc/logrotate.conf
# $Header: /var/cvsroot/gentoo-x86/app-admin/logrotate/files/logrotate.conf,v 1.3 2008/12/24 20:49:10 dang Exp $
#
# Logrotate default configuration file for Gentoo Linux
#
# See "man logrotate" for details
# rotate log files weekly
weekly
#daily
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
compress
# packages can drop log rotation information into this directory
include /etc/logrotate.d
notifempty
nomail
noolddir
# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
/etc/logrotate.d
contient mes fichiers de configuration personnalisés comme mentionné ci-dessus ainsi que les configurations pour mysql, rsync, etc. installées par ces packages.
Ma racine crontab
est vide:
$ sudo crontab -l
no crontab for root
J'ai tout vérifié /etc/cron.{daily,hourly,monthly,weekly}
pour tout ce qui concerne Syslog, et il y a un script qui tourne /var/log/syslog
et /var/log/auth.log
.
Ensuite, j'ai fait un /var/log/messages
-seulement logrotate
fichier de configuration comme suggéré par CarpeNoctem:
$ cat logrotate-messages
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
/var/log/messages {
rotate 5
daily
postrotate
/bin/killall -HUP syslogd
endscript
}
Ensuite, j'ai couru logrotate
manuellement:
$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages
Handling 1 logs
rotating pattern: /var/log/messages forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/messages to /var/log/messages-20100224
creating new /var/log/messages mode = 0644 uid = 0 gid = 0
running postrotate script
running script with arg /var/log/messages : "
/bin/killall -HUP syslogd
"
compressing log with: /bin/gzip
$ which gzip
/bin/gzip
$ file /bin/gzip
/bin/gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
Selon le journal ci-dessus, logrotate
compressé le journal avec / bin / gzip, mais je ne vois pas de fichier de messages compressé dans /var/log
. En outre, la globalisation des anciens fichiers pivotés a échoué.
EDIT 2 : ajout de la sortie de débogage de l' logrotate
exécution après avoir ajouté un .gz
suffixe aux anciens /var/log/message-*
fichiers.
Nous commençons avec:
$ ls /var/log/messages*
/var/log/messages /var/log/messages-20100222.gz
/var/log/messages-20100219.gz /var/log/messages-20100223.gz
/var/log/messages-20100220.gz /var/log/messages-20100224.gz
/var/log/messages-20100221.gz
Exécutez ensuite logrotate
avec notre fichier de configuration personnalisé:
$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages
Handling 1 logs
rotating pattern: /var/log/messages forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
removing /var/log/messages-20100219.gz
removing old log /var/log/messages-20100219.gz
destination /var/log/messages-20100224.gz already exists, skipping rotation
Cette fois, logrotate
glob réussit et trouve le sixième fichier journal compressé, avec l'intention de le supprimer. Le fichier n'est pas réellement supprimé; Je suppose que c'est parce que nous fonctionnons en mode débogage.
Je suis curieux de savoir si l'activation de l' delaycompress
option pour vous /var/log/messages
aidera. Je l'ai activé et vérifierai les résultats le lendemain matin.
Réponses:
Ajout
delaycompress
à la section de configuration pour/var/log/messages
résoudre le problème.De
man logrotate
:Je suppose que
sysklogd
mon démon syslog ne peut pas être invité à fermer son fichier journal, ce qui est donc nécessaire.Fait intéressant, la configuration d' origine que j'avais (sans la
delaycompress
directive), est sorti tout droit deman logrotate
(sauf que je changéweekly
àdaily
):la source
C'est difficile à dire avec juste ces informations, mais je peux vous dire ce qui m'a sauvé plusieurs fois.
Logrotate a une option de débogage qui imprimera un play-by-play de chaque étape qu'il faut pour stdout. Donc, dans ce cas, vous pourriez faire:
La sortie vous dira ce qui se passe exactement. De plus, si vous souhaitez réduire la sortie de débogage, vous pouvez le faire
Bien que vous souhaitiez peut-être placer temporairement les principales options logrotate.conf dans ce bloc de fichiers, car la spécification directe du fichier signifie qu'il n'aura jamais lu les principales options de configuration. La spécification du fichier individuel signifie également que vous pouvez utiliser l'
-f
option (forcer) en combinaison avec l'option de débogage pour obtenir un aperçu de la rotation réelle du fichier de messages en cours.la source
/var/log/messages
fichier en direct et l'delaycompress
option vous aidera.-d, --debug
Turns on debug mode and implies -v. In debug mode, no changes will be made to the logs or to the logrotate state file.
Pensez à essayer ce paramètre dans votre logrotate.conf:
et renommez vos fichiers de messages existants pour utiliser un point au lieu d'un tiret. Essayez à nouveau votre logrotate.
Les indices ci-dessous m'ont amené à croire que le tiret peut entraîner l'échec du glob s'il est interprété d'une manière ou d'une autre (où - corrigerait cela). Cela n'a pas de sens, mais cela pourrait être possible.
la source
/var/log/messages
est que les/var/log/messages
fichiers pivotés ne sont pas compressés.