2009-11-19 4 views
5

J'ai regardé les exemples de logrotate.conf et tout dans mon répertoire /etc/logrotate.d. Nulle part je n'ai pu trouver de documentation sur les variables de ces fichiers. J'essaye de créer un fichier de configuration pour faire tourner les logs d'une application que nous écrivons. Je veux définir le répertoire dans lequel les journaux sont stockés une fois, puis l'utiliser comme une variable, comme ceci:Les variables sont-elles supportées dans les fichiers de configuration de logrotate?

my_app_log_dir=/where/it/is/deployed/logs 

${my_app_log_dir}/*.log ${my_app_log_dir}/some_sub_dir/*.log { 
    missingok 
    # and so on 
    # ... 
} 

Est-ce possible?

Répondre

1

Directement dans le fichier de configuration non (dans la mesure où mes connaissances dans logrotate vont).

Autre solution:

  • Utilisez l'option include pour inclure des parties du fichier de configuration à partir d'un répertoire. Cela peut vous aider si vous avez un paquet pour votre application, le paquet peut laisser un fichier dans ce répertoire contenant uniquement les entrées pour votre application.
6

Vous pouvez obtenir ce que vous cherchez en mettant en œuvre cette bidouille:

my-logrotate.conf (REMARQUE: les guillemets doubles " sont obligatoires, notez que les noms de fichiers ne doivent pas apparaître sur la même ligne)

"*.log" 
"some_sub_dir/*.log" 
{ 
    missingok 
    # and so on 
    # ... 
} 

Ensuite, le script logrotate réelle - my-logrotate.sh

#!/bin/sh 

set -eu 

cd "${my_app_log_dir}" 
exec logrotate /path/to/my-logrotate.conf 

maintenant vous pouvez ajouter logrotate.sh à votre crontab.

1

Vous pouvez utiliser un bash "here document" pour créer un fichier de configuration approprié à la volée, soit au moment de l'installation, soit avant l'exécution de logrotate.

Un script bash pourrait ressembler à ceci:

cat >rt.conf <<. 
"${my_app_log_dir}/*.log" { 
    rotate 5 
    size 15k 
    missingok 
} 
. 

logrotate rt.conf 
Questions connexes