Comment logrotate gère-t-il exactement «quotidiennement»?

30

À en juger par les horodatages de mes systèmes, logrotate effectue sa rotation journalière des journaux lorsque logrotate est exécuté par cron. Cependant, si je l'exécute plus tôt, cela ne fait pas tourner les fichiers. Comment logrotate sait-il s'il doit les faire pivoter ou non, conserve-t-il un historique ou peut-être utilise-t-il des horodatages?

Kyle Brandt
la source

Réponses:

32

Je crois que c'est le contenu du dossier d'État, ce qui est mon cas /var/lib/logrotate.status. Chaque fichier a une ligne, qui est la date à laquelle il a été tourné pour la dernière fois; si vous exécutez logrotate à une date telle qu'un fichier donné doit être tourné, étant donné le nombre de jours entre la date actuelle et la date dans le fichier (1 pour quotidien, 7 pour hebdomadaire, etc.), le fichier sera pivoté.

logrotate ne semble pas se soucier de l'heure à laquelle il est exécuté; même s'il s'exécute généralement à 23 h 55, si vous l'exécutiez à 01 h 30 à la place, il ferait toujours pivoter les fichiers marqués quotidiennement et pour la dernière fois hier; mais après l'avoir fait, cela mettrait la date du jour dans le fichier d'état (par rapport à tout fichier pivoté), donc une deuxième exécution à 2355 ne ferait rien.

MadHatter soutient Monica
la source
1
Hmm .. Donc ça tourne seulement si: date courante> date dedans /var/lib/logrotate/status(comme le fichier est dans mon cas).
Kyle Brandt
2
Je pense qu'il ne fait rien du tout si 24 heures se sont écoulées depuis sa dernière exécution, ce qui fonctionne en examinant le mtime du fichier d'état. Une fois qu'il est décidé qu'une journée entière s'est écoulée et qu'il peut légalement faire quoi que ce soit, il prend des décisions QUOTIDIENNES, HEBDOMADAIRES, etc. en fonction des champs de date à l'intérieur du fichier.
MadHatter prend en charge Monica
4
Eh bien, il semble utiliser la date dans ce fichier. J'ai remis le jour un jour dans le fichier d'état et l'ai exécuté ... il a tourné ..
Kyle Brandt
Ayant juste reculé et poussé mon logrotate, je pense que j'avais tort et ce que vous écrivez ci-dessus est juste. Il décide s'il est déjà exécuté aujourd'hui en regardant l'horodatage du fichier d'état; si ce n'est pas le cas, il extrait les dates de la dernière rotation du fichier d'état et agit en conséquence. J'ai juste menti pour logrotate avec vi et touchez -t pour le persuader qu'il a fonctionné pour la dernière fois à 2355 hier, quand il a tourné mes journaux munin. Le relancer, même si cela fait moins de 24 heures, il les a fait pivoter et a mis à jour le fichier d'état en conséquence.
MadHatter prend en charge Monica
J'ai mis à jour ma réponse à ma compréhension actuelle, compte tenu de l'ensemble des tests que je viens de lancer (trancher mes journaux munin de huit façons à partir de dimanche, mais peu importe!).
MadHatter prend en charge Monica
11

Depuis la page de manuel logrotate:

Normalement, logrotate est exécuté comme une tâche cron quotidienne. Il ne modifiera pas un journal plus d'une fois par jour, sauf si le critère de ce journal est basé sur la taille du journal et que logrotate est exécuté plusieurs fois par jour, ou si l'option -f ou -force est utilisée.

sebthebert
la source
1
pour voir quand cron.daily est exécuté, allez ici .
Trevor Boyd Smith