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


Puisque 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 www@my.org
       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. Maintenant, ce qui m'intéresse, c'est de savoir si celui-ci est également autorisé:

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

Voici le raisonnement: j'ai plusieurs vhosts et je les ai divisés par l'utilisateur qui "possède" ces vhosts. Étant donné que les fichiers journaux sont lisibles par tous les utilisateurs, je veux monter un dossier dans le répertoire personnel de l'utilisateur, mais le limiter aux fichiers journaux que l'utilisateur «possède», ce qui est plus facile en séparant les journaux en dossiers Le montage nécessite ce système de toute façon). Donc, je cherche une solution pour faire pivoter les deux fichiers journaux sous /var/log/httpd ainsi que tous les fichiers journaux sous les sous-répertoires de ce répertoire - sans pour autant avoir à lister 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 complets. J'utilise la version logrotate 3.7.8-6 fournie avec Debian "Squeeze", mais je pense que ce n'est pas nécessairement spécifique à une version de distribution ou de programme.


73
2018-03-10 21:09


origine




Réponses:


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 ou au fichier d'état logrotate.

  • -f = demande à logrotate de forcer la rotation, même si elle ne pense pas           Ceci est nécessaire. Parfois, cela est utile après l'ajout de nouvelles           entrées à logrotate, ou si les anciens fichiers journaux ont été supprimés par           hand, à mesure que les nouveaux fichiers seront créés et que la journalisation           continuer correctement. »


104
2018-03-10 22:08



Merci beaucoup! Juste essayé et ça marche. Il apparaît de la sortie que les caractères génériques peuvent fonctionner comme ils le font dans le shell. - 0xC0000022L


Je voulais juste clarifier, parce que c’est ce que j’ai cherché ici à faire,

Plusieurs fichiers journaux peuvent être spécifiés pour une seule configuration, par exemple

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail nobody@example.org
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}

14
2018-01-18 20:21



//, Y a-t-il un problème avec les différents chemins sur plusieurs lignes? - Nathan Basanese
@NathanBasanese Je ne comprends pas bien votre question, je pense que vous pouvez pointer les lignes de chemin sur les fichiers n'importe où sur le disque que vous aimez, ils ne doivent pas tous être dans le même préfixe de répertoire. - ThorSummoner
@NathanBasanese: Non, ça marche très bien. - uav


De la page de manuel pour logrotate:

Notez que les noms de fichiers journaux peuvent être placés entre guillemets (et que   les citations sont obligatoires si le nom contient des espaces). Coquille normale   les règles de citation s'appliquent, avec ', "et \ caractères pris en charge.

N'oubliez pas de modifier ou de supprimer les guillemets lorsque vous passez d'un motif unique à un motif multiple:

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 unique.

Cela marche:

'/var/log/*.log' {

et cela fonctionne aussi:

"/var/log/*.log" {

Testé avec logrotate 3.10.0


2
2018-03-20 09:21



Serait intéressant de savoir si cela fonctionne: "/var/space /log/*.log" "/var/log/*.blog" - KajMagnus