Au fil du temps, j'ai remarqué des journaux /var/log
tel que auth
, kern
et messages
commençait énormément. J'ai fait 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
}
aussi, j'ai l'option compress
activé:
$ grep compress /etc/logrotate.conf
# uncomment this if you want your log files compressed
compress
Cela fonctionne bien pour auth.log
, kern.log
Et d'autres, ce qui signifie que chacun de ces journaux est gzippé et tourné, les 5 derniers jours des journaux retenus. /var/log/messages
Cependant, c'est pas En étant comprimé, ce qui a entraîné 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 il est expliqué dans ne autre logrotate
question sur Serverfault , les anciens journaux sont (très probablement) ne sont pas supprimés car les fins de fichier sont différentes pour chaque fichier. Cela semble être parce que les fichiers ne sont pas gzippés.
Que puis-je faire pour avoir /var/log/messages
comprimé et tourné avec les 5 derniers jours de journaux retenus comme tous mes autres fichiers journaux? Qu'est-ce que je rate?
Editer 1 : Informations supplémentaires sur demande dans les premières réponses.
Je cours gentoo Linux. Mon /etc/logrotate.conf
déposer:
$ 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 avec configuration pour MySQL, RSYNC, etc. installés par ces packages.
Ma racine crontab
est vide:
$ Sudo crontab -l
no crontab for root
J'ai vérifié tous /etc/cron.{daily,hourly,monthly,weekly}
Pour quelque chose de syslog associé, 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
a compressé le journal avec/bin/gzip, mais je ne vois pas de fichier de messages compressé dans /var/log
. En outre, le globe global pour les vieux fichiers rotatifs a échoué.
Edition 2 : Ajout de la sortie de débogage de logrotate
exécuté après l'ajout d'un .gz
suffixe à l'ancien /var/log/message-*
des dossiers.
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
Puis exécutez 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
'S GLOB réussit et trouve le sixième journal comprimé, l'intention de l'éliminer. Le fichier n'est pas réellement supprimé; Je suppose que c'est parce que nous sommes en mode de débogage.
Je suis curieux de savoir si l'activation de l'option delaycompress
pour /var/log/messages
aidera. Je l'ai activé et je vérifierai les résultats le lendemain matin.
Ajout delaycompress
à la section de configuration pour /var/log/messages
résolu le problème.
De man logrotate
:
delaycompress
Postpone compression of the previous log file to the next rota‐
tion cycle. This only has effect when used in combination with
compress. It can be used when some program cannot be told to
close its logfile and thus might continue writing to the previ‐
ous log file for some time.
Je suppose sysklogd
, mon démon Syslog ne peut pas être dit de fermer son journal et que cela est donc nécessaire.
Fait intéressant, la configuration d'origine que j'avais (sans la directive delaycompress
) est venue tout droit de man logrotate
(sauf que j'ai changé weekly
à daily
):
# sample logrotate configuration file
compress
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
Il est difficile de dire avec juste cette information, mais je peux vous dire ce qui m'a sauvé plusieurs fois.
Logrotate a une option de débogage qui imprimera un jeu de lecture de chaque étape qu'il faut à stdout. Donc, dans ce cas, vous pourriez faire:
logrotate -d /etc/logrotate.conf
La sortie vous dira ce qui se passe exactement. En outre, si vous voulez réduire la sortie de débogage, vous pouvez faire
logrotate -d /etc/logrotate.d/messages
Bien que vous puissiez vouloir placer temporairement les principales options de Logrotate.conf dans ce bloc de fichiers, car spécifiez le fichier signifie que cela n'aura jamais lu les options de configuration principales. Spécification du fichier individuel signifie également que vous pouvez utiliser le -f
(FORCE) Option en combinaison avec l'option de débogage pour examiner une rotation réelle du fichier de messages en cours.
Envisager d'essayer ce paramètre dans votre logrotate.conf:
dateformat .%Y%m%d
et renommez vos fichiers de messages existants pour utiliser un point au lieu d'un tiret. Ensuite, essayez votre logrotate à nouveau.
Les indices ci-dessous m'ont amené à croire que le tiret peut entraîner l'échec du GLOB si elle est interprétée d'une manière ou d'une autre comme une option (où - réglerait cela). Cela n'a pas de sens, mais cela pourrait être possible.
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