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

57

J'ai la nouvelle configuration logrotate suivante:

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

Quand je cours logrotate -d nexus, je reçois 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 à quoi je m'attendais, c'est que le fichier nexus.log aurait été tronqué et qu'un nouveau fichier, du type nexus.log-201106241000, aurait été créé.

Riches
la source
De plus, rappelez-vous que lorsque vous utilisez l'option -d, CELA NE TOURNE PAS LES JOURNAUX. Il vous montre ce que cela ferait de fonctionner sans option, comme un plan de match. Causé moi de graves maux de tête quand j'ai pensé que je pouvais les voir tourner, et puis ils étaient toujours là.
Maxwell Flanders

Réponses:

64

Très probablement, le fichier journal date de moins d'un jour et / ou a été soumis à une rotation au cours de la dernière journée et logrotate se souvient de l'historique.

Si vous ajoutez -fcela, vous forcerez une rotation si vous le souhaitez vraiment (bien que vous ne sachiez pas à 100% comment cela interagit -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.

EightBitTony
la source
4
Dans FreeBSD c'est /var/run/logrotate.status
kaleissin
Vérifiez également l'utilisation éventuelle de l'argument -s dans l'invocation de l'emplacement du fichier d'état
JGurtz
2
-d+ -frend logrotate rapport "a besoin d'une rotation" pour tous les fichiers, même ceux qui ne correspondent pas
Fluffy
Pour ajouter à cela, logrotateil suffit de modifier la date dans le fichier d'état pour qu'elle soit plus ancienne que la stratégie de rotation, ce qui suffit à convaincre qu'il doit faire pivoter le journal lorsqu'il s'exécute à nouveau.
Centimane
Sur CentOS, j'ai modifié /var/lib/logrotate.status pour que logrotate fonctionne. Comme indiqué par EightBitTony, le journal quotidien consignera l’historique. Si le fichier ne figure pas dans l'historique avec une date antérieure, logrotate ne le fera pas pivoter.
Marc
58

La première fois que vous exécutez logrotate avec une nouvelle configuration de journal, il ne sait pas quand la dernière rotation du journal a eu lieu. Il écrit donc simplement une ligne d'état /var/lib/logrotate/statusindiquant qu'il a été exécuté aujourd'hui.

Lorsqu'il est ensuite exécuté le lendemain, il voit que le journal est vieux d'un jour et le fait pivoter comme prévu. Si vous ne voulez pas attendre, éditez le fichier d'état de logrotate et fixez la date d'état de votre journal au jour précédent.

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

Tony Sweeney
la source
5

Parfois, même si vous exécutez logrotate manuellement, cela ne fonctionnera pas si vous le faites le même jour et que la dateextvaleur 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 size (par exemple size 200M). Au moins sur CentOS 6, logrotate ne pourra pas faire pivoter votre fichier journal, car il existe déjà.

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

Voir man logrotatepour plus d'informations.

emerino
la source
1

Attention, en courant

logrotate -vdf /etc/logrotate.conf

l’événement, bien que seuls les événements simulés soient consignés /var/lib/logrotate.status et les exécutions ultérieures de logrotate donneront la réponse mentionnée

log does not need rotating
helvete
la source
1
Je ne peux pas reproduire cela sur Ubuntu (16.04 et 17.04). Si "/var/lib/logrotate.status" est utilisé, vous devez utiliser une autre distribution. Ubuntu se connecte à "/ var / lib / logrotate / status".
Philipp Claßen
2
@Philipp Claßen: Vous avez raison, ceci (fichier d'état placé à /var/lib/logrotate.status) a été observé lors du débogage de la configuration de Logrotate 3.10 sur Alpine linux 3.5 dans un conteneur de menu fixe. Mais il n'y a pas de drapeau Ubuntu dans la définition de la question, n'est-ce pas?
helvete
1
Oui, c'est bon. Je voudrais juste le mentionner parce que Ubuntu est si populaire. Je suppose que beaucoup de gens lisent cette question parce qu'ils veulent réparer leur serveur, qui aujourd'hui fonctionne souvent avec Ubuntu.
Philipp Claßen
1
OK c'est juste. Pour être complet, je peux ajouter que l’emplacement du fichier d’état à Centos 7 distro est à/var/lib/logrotate/logrotate.status
helvete le