it-swarm-fr.com

Logrotate: "le journal n'a pas besoin de tourner" pourquoi?

J'ai la nouvelle configuration logrotate suivante:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

Quand je lance logrotate -d nexus, J'obtiens ce qui suit:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

Mon dossier/var/log/nexus/contient les éléments suivants:

nexus.log
oldlogs.tar.gz

Pourquoi LogRotate ne fait-il pas tourner le fichier nexus.log? Ce que j'attendais, c'est que le fichier nexus.log aurait été tronqué et qu'un nouveau fichier, quelque chose comme nexus.log-201106241000, aurait été créé.

60
Rich

Très probablement, le fichier journal a moins d'un jour et/ou a été tourné au cours du dernier jour et logrotate se souvient de l'historique.

Si vous ajoutez -f cela forcera une rotation si vous le voulez vraiment (même si vous n'êtes pas sûr à 100% de la façon dont cela interagit avec -d).

Vous pouvez consulter l'historique, l'emplacement dépend de votre distribution, mais peut être /var/lib/logrotate/status. Ce fichier indique la dernière rotation des journaux.

68
EightBitTony

La première fois que vous exécutez logrotate avec une nouvelle configuration de journal, il ne sait pas quand la dernière rotation de journal s'est produite, il écrit donc simplement une ligne d'état dans /var/lib/logrotate/status à l'effet qu'il a été exécuté aujourd'hui.

Lorsqu'il s'exécute ensuite le jour suivant, il constate que le journal a un jour et le fait pivoter comme prévu. Si vous ne voulez pas attendre, modifiez le fichier d'état de logrotate et indiquez la date d'état de votre journal à la veille.

Lorsque vous exécutez logrotate manuellement, cela fonctionnera comme prévu

61
Tony Sweeney

Parfois, même si vous exécutez logrotate manuellement, cela ne fonctionnera pas si vous le faites le même jour et avez dateext où la valeur par défaut n'inclut pas les senconds (par exemple -%Y%m%d). Pas même si vous modifiez le fichier d'état de logrotate ou lorsque vous utilisez la directive de taille (par exemple size 200M). Au moins sur CentOS 6, logrotate ne parviendra pas à faire pivoter votre fichier journal car il existe déjà.

Pour résoudre ce problème, vous devez utiliser dateformat au lieu de dateext, avec une valeur comme: %Y%m%d%s.

Voir man logrotate pour plus d'informations.

5
emerino

Méfiez-vous qu'en exécutant

logrotate -vdf /etc/logrotate.conf

l'événement bien que simulé sera enregistré dans /var/lib/logrotate.status et les exécutions de logrotate suivantes vous répondront avec la mention

log does not need rotating
1
helvete