web-dev-qa-db-fra.com

logrotate quotidiennement et taille?

Si une configuration logrotate est spécifiée avec les paramètres "size" et "daily", lequel est prioritaire? Où est-ce documenté? Je voudrais que ces rotations se produisent comme une opération booléenne OR, c'est-à-dire que si les journaux datent d'un jour, ils tournent, OR s'ils sont plus grands que une certaine taille, ils seront également tournés. Cependant, logrotate n'utilise actuellement que la directive "size", et semble ignorer la directive "daily". Logrotate est configuré pour fonctionner toutes les heures. OS est linux, Red Hat et Debian dérivés.

De plus, je spécifie "quotidiennement" en premier, puis "taille" depuis le début du fichier. Je ne sais pas si la commande est importante, mais dans tous les cas, il faut venir en premier dans le fichier de configuration ...

Merci!

43
cat pants

Si la directive size est utilisée, logrotate ignorera la quotidiennement , hebdomadaire , mensuelle et annuelle directives. Ce n'est pas clair dans la documentation lorsque vous exécutez le man logrotate commande. Cependant, cela peut être confirmé dans la pratique, et est mentionné dans certains articles de blog arbitraires comme celui-ci .

Il existe une directive appelée minsize qui, selon la page de manuel logrotate, est la seule directive de taille qui peut être utilisée conjointement avec celles de l'heure. Cependant, ce n'est toujours pas ce que vous voulez. Utiliser minsize avec quotidiennement dit essentiellement: faire tourner les journaux tous les jours, mais uniquement lorsqu'ils ont une taille d'au moins # Mo.

À ce jour, je n'ai trouvé aucun moyen avec logrotate de faire la condition dont vous avez besoin: tourner tous les jours, sauf si la taille dépasse # Mo, auquel cas tourner immédiatement. Je ne pense pas que cela soit supporté en utilisant uniquement les directives logrotate. Il pourrait être possible de faire avec un script intelligent via les directives de hook de script comme prérotate , postrotate , première action et dernière action .

Mise à jour :

Depuis logrotate 3.8.1, maxsize et timeperiod sont pris en charge ensemble, ce qui serait la solution idéale. Voir la réponse à ce post: Comment faire pivoter le journal en fonction d'un intervalle à moins que le journal ne dépasse une certaine taille?

65
gregtczap

La première réponse de @Egg est, selon mes expériences avec logrotate, pas vraie!

Si quotidien, mensuel, ... venez premier et ensuite taille directive, quotidien, mensuel, ... = sera ignoré et la directive size s'appliquera au fichier journal.

De même, lorsque j'utilise pour la première fois la directive taille puis les directives quotidienne, hebdomadaire, mensuelle et annuelle, la directive taille sera ignorée.

2
M. S.

Si vous ajoutez Quotidien, il va tourner chaque jour même si la condition Taille est remplie. Si vous ajoutez également la condition de taille, vous pouvez obtenir deux rotations en une journée selon le niveau de détail de l'enregistrement.

Si Quotidien passe en premier dans le script, alors Size ne peut pas se déclencher.

1
Paul Hickox

En fait, ma page de manuel sur Red Hat semble assez claire sur les différences entre la taille et la taille:

taille min

          Log  files  are rotated when they grow bigger then size bytes,
          but  not  before  the  additionally  specified  time  interval
          (daily,  weekly, monthly, or yearly).  The related size option
          is similar except that it is mutually exclusive with the  time
          interval  options, and it causes log files to be rotated with-
          out regard for the last rotation time.  When minsize is  used,
          both the size and timestamp of a log file are considered.
1
Geoffrey M.