web-dev-qa-db-fra.com

logrotate syntaxe du fichier de configuration - plusieurs entrées génériques possibles?

Comme la page de manuel ne répond pas à ma question et que je ne souhaite pas forcer un cycle de rotation, j'ai décidé de poser la question ici.

La page de manuel de logrotate donne l'exemple suivant:

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail [email protected]
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }

Tous les exemples avec des caractères génériques ne contiennent qu'une seule entrée. Ce qui m'intéresse maintenant, c'est si celui-ci est également autorisé:

   /var/log/httpd/*.log /var/log/httpd/*/*.log {
       # ... same as above
   }

Voici le raisonnement: J'ai plusieurs hôtes virtuels et je les sépare par l'utilisateur qui "possède" ces hôtes virtuels. Comme les fichiers journaux sont lisibles par tout le monde, je veux monter un dossier dans le répertoire de base de l'utilisateur, mais le limiter aux fichiers journaux que cet utilisateur "possède", ce qui est plus facile en séparant les journaux en dossiers (et Le montage nécessite de toute façon ce schéma). Je cherche donc une solution permettant de faire pivoter les fichiers journaux sous /var/log/httpd ainsi que tous les fichiers journaux sous les sous-répertoires de ce répertoire - sans avoir à répertorier chaque sous-répertoire par nom.

En général, la page de manuel ne permet pas de savoir si plusieurs entrées sont possibles pour les règles génériques ou uniquement pour les chemins d'accès complets. J'utilise logrotate version 3.7.8-6, qui est fournie avec Debian "Squeeze", mais j'estime que cela n'est pas nécessairement spécifique à une distribution ou à une version du programme.

79
0xC0000022L

Oui, vous pouvez utiliser plusieurs caractères génériques. Vous pouvez tester votre fichier sans effectuer les rotations réelles en procédant comme suit:

logrotate -d -f /etc/logrotate.conf
  • -d = Active le mode débogage. En mode débogage, aucune modification ne sera apportée aux journaux ni au fichier d'état logrotate.

  • -f = Indique à logrotate de forcer la rotation, même s’il ne pense pas que cela soit nécessaire. Parfois, cela est utile après avoir ajouté de nouvelles entrées à logrotate, ou si d'anciens fichiers journaux ont été supprimés à la main, car les nouveaux fichiers seront créés et la journalisation se poursuivra correctement.

114
Dennis Williamson

Je voulais juste clarifier, parce que c'est ce que je suis arrivé ici à chercher comment faire,

Il est permis de spécifier plusieurs fichiers journaux pour une même configuration, par exemple

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail [email protected]
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}
21
ThorSummoner

De la page de manuel pour logrotate :

Notez que les noms de fichier journal peuvent être placés entre guillemets (et que ceux-ci sont obligatoires si le nom contient des espaces). Les règles de citation normales du shell s’appliquent, avec les caractères ', "et\acceptés.

N'oubliez pas de modifier ou de supprimer les guillemets lorsque vous passez d'un modèle à un autre:

Cela marche:

/var/log/*.log /var/log/*.blog {

cela fonctionne aussi:

/var/log/*.log
/var/log/*.blog {

Cela ne fonctionne pas:

'/var/log/*.log /var/log/*.blog' {

et ni ceci:

"/var/log/*.log /var/log/*.blog" {

Comparez avec le cas de motif unique.

Cela marche:

'/var/log/*.log' {

et cela fonctionne aussi:

"/var/log/*.log" {

Testé avec logrotate 3.10.0

4
Piotr Dobrogost