Comment faire pivoter le journal en fonction d'un intervalle à moins que le journal ne dépasse une certaine taille?

20

Depuis la page de manuel de logrotate:

Taille min.
Les fichiers journaux pivotent lorsqu'ils dépassent la taille en octets, mais pas avant l'intervalle de temps supplémentaire spécifié (quotidien, hebdomadaire, mensuel ou annuel). L'option de taille associée est similaire, sauf qu'elle s'exclut mutuellement avec les options d'intervalle de temps et entraîne la rotation des fichiers journaux sans tenir compte de la dernière heure de rotation. Lorsque minsize est utilisé, la taille et l'horodatage d'un fichier journal sont pris en compte.

taille taille
Les fichiers journaux pivotent lorsqu'ils dépassent la taille en octets. Si la taille est suivie de k, la taille est supposée être en kilo-octets. Si le M est utilisé, la taille est en mégaoctets, et si G est utilisé, la taille est en gigaoctets. Donc, la taille 100, la taille 100k, la taille 100M et la taille 100 sont toutes valides.

J'ai défini la taille comme 5M et l' intervalle comme hebdomadaire en pensant que les journaux seraient tournés sur une base hebdomadaire et une rotation supplémentaire se produirait si la taille du journal dépasse 5M. Mais ce qui se passe, c'est que le journal n'est pas tourné à moins qu'il ne dépasse 5M, ce qui semble être ce que minsize est censé faire.

Suis-je en train d'interpréter le manuel à tort? Comment faire tourner le journal sur une base hebdomadaire ET s'il dépasse 5M?

ÉDITER:

Je ne sais pas si les informations suivantes sont pertinentes, mais juste pour compléter:

J'utilise rsyslog pour faire la journalisation principale des messages, secure, cron, maillog, boot. Voici la date de rotation et la taille du fichier des avant-derniers journaux où la taille et l'intervalle sont définis comme décrit ci-dessus:

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

Comme on peut le voir, seuls les messages tournent.

EDIT2:

J'aurais dû vérifier avec man logrotate. Ils l'ont en fait amélioré avec l' option maxsize . Cela devrait être ce que je recherche:

taille maxsize
Les fichiers journaux pivotent lorsqu'ils dépassent la taille en octets avant même l'intervalle de temps spécifié (quotidien, hebdomadaire, mensuel ou annuel). L'option de taille associée est similaire, sauf qu'elle s'exclut mutuellement avec les options d'intervalle de temps et entraîne la rotation des fichiers journaux sans tenir compte de la dernière heure de rotation. Lorsque maxsize est utilisé, la taille et l'horodatage d'un fichier journal sont pris en compte.

Débordement de question
la source

Réponses:

24

Voici quelques réponses aux questions: logrotate quotidiennement et taille?

En règle générale, logrotateil ne sera exécuté qu'une fois par jour, de sorte que les limites de taille ne seront pas respectées exactement. logrotateLe fichier d'état de (éventuellement /var/lib/logrotate.status) ne stocke que les dates (pas les heures), il n'est pas destiné à être utilisé plus fréquemment, vous ne pouvez donc pas faire tourner les fichiers de manière triviale plus fréquemment ( mise à jour : la version 3.85 ajoute une prise en charge toutes les heures et stocke un horodatage complet dans le fichier d'état .)

Vous ne dites pas lequel syslogdvous utilisez, rsyslog et syslog-ng prennent en charge la rotation basée sur la taille autogérée, vous devriez donc être en mesure de les faire pivoter par taille et de les faire logrotatepivoter chaque semaine (bien qu'une réflexion puisse être nécessaire pour dénomination des fichiers pour vous assurer que la rotation simultanée des fichiers ne supprime pas accidentellement quelque chose).

Une autre option consiste à utiliser des journaux redirigés, tout comme Apache, en fait, Apache-2.4 rotatelogs prend en charge exactement cette fonctionnalité (les versions précédentes ne prenaient en charge que la taille ou l'heure indépendamment). Vous ne dites pas d'où proviennent les journaux, mais vous pourrez peut-être vous connecter à un canal ou à un fifo, et utiliser rotatelogs, si cela est pris en charge.

Avec logrotate<= v3.8.0, les trois scénarios pris en charge sont:

  1. la taille tourne selon la taille, une fois par jour au maximum, quelle que soit la durée écoulée
  2. timeperiod rotation inconditionnelle par timeperiod, quelle que soit la taille
  3. minsize & timeperiod si la taille du fichier journal dépasse minsize, puis tournez par timeperiod. Une utilisation courante est la «taille 1», ce qui signifie que les journaux de 0 octet ne subissent pas de rotation, ce qui minimise l'encombrement.

logrotate-3.8.1 ajoute:

  1. maxsize & timeperiod tournent lorsque l'une des tailles dépasse maxsize, ou après la durée écoulée. logrotatedans ce cas, il peut être nécessaire d'exécuter plus que la valeur par défaut une fois par jour.

logrotate-3.8.5 ajoute:

  1. support horaire et stocke un horodatage complet dans le fichier d'état. Vous devez exécuter logrotate(au moins) toutes les heures pour cela.
Mr Spuratic
la source
Veuillez voir ma mise à jour, merci pour le lien. Semble que certains scripts sont nécessaires? minsize ne semble pas très utile, je me demande pourquoi ils l'ont au lieu de maxsize.
Débordement de questions le
1
Oui, l'option maxsize est maintenant disponible. Clôture du dossier :)
Débordement de questions
repéré que dans les documents avant de lire votre mise à jour ... réponse maintenant développée. THX.
mr.spuratic
1
> Le fichier d'état de logrotate (éventuellement /var/lib/logrotate.status) ne stocke que les dates (pas les heures). Cette déclaration peut être obsolète. Je viens de vérifier mon fichier d'état logrotate, et il contenait des horodatages avec une deuxième résolution: "/var/log/kern.log" 2018-3-12-1: 8: 16
hyperair