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

83

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 vhosts et je les ai séparés par l'utilisateur qui "possède" ces vhosts. 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 recherche donc une solution permettant de faire pivoter les fichiers journaux sous /var/log/httpdainsi 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.

0xC0000022L
la source

Réponses:

119

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.

Dennis Williamson
la source
3
Merci beaucoup! Juste essayé et ça marche. D'après la sortie, il semble que les caractères génériques fonctionnent comme dans le shell.
0xC0000022L
24

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
}
ThorSummoner
la source
//, n'y a-t-il pas 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 indiquer les chemins d'accès aux fichiers n'importe où sur le disque, ils ne doivent pas tous se trouver dans le même préfixe de répertoire.
ThorSummoner
@NathanBasanese oh, je crois comprendre, avoir plusieurs cibles de rotation du journal sur différentes lignes semble être une utilisation normale. J'ai copié ce formulaire à partir d'autres scripts logrotate.d, par exemple /etc/logrotate.d/rsyslog
ThorSummoner
5

De la page de manuel pour logrotate :

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

Piotr Dobrogost
la source
2
Il serait intéressant de savoir si cela fonctionne:"/var/space /log/*.log" "/var/log/*.blog"
KajMagnus