web-dev-qa-db-fra.com

Fichiers Logrotate avec date dans le nom du fichier

J'essaie de configurer logrotate dans RHEL pour les journaux Tomcat6. Actuellement, logrotate fonctionne bien pour le journal catalina.out, il est tourné et compressé correctement.

Le problème est avec les fichiers avec date comme:

catalina.2012-01-20.log
catalina.2012-01-21.log
catalina.2012-01-22.log

Ces fichiers ne sont pas tournés. Je comprends que je dois les configurer dans le fichier /etc/logrotate.d/Tomcat6 où la rotation pour catalina.out est configurée. Mais je ne peux pas le configurer.

Tout ce que je veux, c'est que ces anciens fichiers soient compressés quotidiennement, à l'exception du fichier journal de la date actuelle.

Quelqu'un peut-il m'aider à ce sujet, s'il vous plaît !!

Merci Noman A.

31
Noman Amir

(Premier post jamais si il ressemble à une araignée ivre l'a formaté alors désolé)

Après avoir utilisé notre ami Google, ici et je ne me souviens plus où j'ai réussi à réaliser quelque chose en utilisant logrotate (plutôt que cron ou un autre équivalent).

J'ai le suivant dans/var/log/rsync /:

-rw-r--r-- 1 root root 1.1M Apr  9 08:13 2014-04-09 07:48:18.log
-rw-r--r-- 1 root root 1.4M Apr 11 15:20 2014-04-11 15:02:52.log
-rw-r--r-- 1 root root 1.6M Apr 11 15:42 2014-04-11 15:22:04.log
-rw-r--r-- 1 root root 1.8M Apr 12 08:01 2014-04-12 07:45:31.log
-rw-r--r-- 1 root root 2.0M Apr 13 08:10 2014-04-13 07:53:38.log
-rw-r--r-- 1 root root 2.2M Apr 14 08:19 2014-04-14 07:51:09.log
-rw-r--r-- 1 root root 2.5M Apr 15 08:05 2014-04-15 07:37:38.log
-rw-r--r-- 1 root root 2.7M Apr 16 08:11 2014-04-16 07:43:14.log

et le fichier logrotate suivant:

/var/log/rsync/*.log {
       daily
       rotate 7
       compress
       delaycompress
       notifempty
       missingok
}

ce que je pensais était tout à fait raisonnable. Mais après qu'il ait refusé de travailler et en découvrant que cela ne fonctionnerait jamais (avec la permission de ce post), je me suis demandé s'il pouvait être truqué pour le faire fonctionner.

Après de nombreux tests et ajustements, j'ai réussi à le truquer de la manière suivante:

/var/log/rsync/dummy {
        daily
        rotate 0
        create
        ifempty
        lastaction
                /usr/bin/find /var/log/rsync/ -mtime +7 -delete
                /usr/bin/find /var/log/rsync/ -mtime +1 -exec gzip -q {} \;
        endscript
}

dans un fichier de configuration logrotate appelé /etc/logrotate.d/local-rsync. Créez ensuite le fichier journal factice:

touch /var/log/rsync/dummy

puis forcer un logrotate avec:

logrotate -fv /etc/logrotate.d/local-rsync

qui donne:

-rw-r--r-- 1 root root  71K Apr  9 08:13 2014-04-09 07:48:18.log.gz
-rw-r--r-- 1 root root  88K Apr 11 15:20 2014-04-11 15:02:52.log.gz
-rw-r--r-- 1 root root  82K Apr 11 15:42 2014-04-11 15:22:04.log.gz
-rw-r--r-- 1 root root  84K Apr 12 08:01 2014-04-12 07:45:31.log.gz
-rw-r--r-- 1 root root  87K Apr 13 08:10 2014-04-13 07:53:38.log.gz
-rw-r--r-- 1 root root  92K Apr 14 08:19 2014-04-14 07:51:09.log.gz
-rw-r--r-- 1 root root 2.5M Apr 15 08:05 2014-04-15 07:37:38.log
-rw-r--r-- 1 root root 2.7M Apr 16 08:11 2014-04-16 07:43:14.log
-rw-r--r-- 1 root root    0 Apr 16 12:11 dummy

Attends maintenant demain matin ...

Je me rends compte que cron serait plus ordonné mais j'ai un autre élément dans le fichier de configuration logrotate et je voulais garder les deux ensemble.

Le bonus avec le fichier factice est qu'il ne prend pas de place!

Vous pouvez constater qu'il ne semble pas avoir tourné quoi que ce soit un jour. Il m'a fallu du temps pour comprendre pourquoi, mais ensuite ça a brillé. find -mtime +1 correspond à des jours entiers (c.-à-d. 24 * 60 minutes) et si la rotation journalière quotidienne a démarré en moins de 24 heures depuis la dernière fois où les journaux ont été créés, alors il semble parfois ne pas avoir fonctionné. Si cela vous dérange, l'utilisation de 23 heures avec find -mmin +1380 pourrait être plus appropriée.

39
northern-bradley

J'ai passé pas mal de temps à lire beaucoup de documentation. Logrotate ne semble pas pouvoir regrouper les différents fichiers avec des dates incluses dans le nom du fichier. Logrotate ne peut pas faire ce dont nous avons besoin.

Vous avez deux options pour modifier la fonction de journalisation fournie par Java/Tomcat pour ne pas inclure la date dans le nom du fichier. http://Tomcat.Apache.org/Tomcat-6.0- doc/logging.html

La seconde et plus rapide consiste à utiliser votre propre petit script pour faire le travail à votre place, en utilisant find. https://serverfault.com/questions/256218/logrotation-when-filenames-includes-date , https://serverfault.com/a/256231/7112

find/pathtologs/* -mtime +5 -exec rm {} \;

J'ai opté pour la deuxième option, car nos développeurs ont codé les dates dans les noms de fichiers. Il faut donc que cela reste ainsi. Le -mtime +5 définit la recherche pour rechercher uniquement les fichiers qui datent de plus de 5 jours.

De la documentation de find.

La dernière modification des données du fichier a eu lieu il y a n * 24 heures. Voir les commentaires de -atime pour comprendre comment l'arrondi affecte l'interprétation des temps de modification des fichiers.

Mis à jour selon le commentaire

trouver/pathtologs/* -mtime +5 -delete

Si vous souhaitez spécifiquement supprimer, c'est un moyen rapide de le faire. Si vous avez besoin d'une autre commande, vous pouvez toujours remplacer le exec rm {} \; avec autre chose.

11
nelaaro

Quelque chose comme ça dans /etc/cron.d/rotate_Tomcat_logs:

# delete every log file over 100 days old, and compress every log file over 1 day old.
00 1 * * * root ( find /opt/Tomcat/logs -name \*log\* -name \*.gz -mtime +100 -exec rm -f {} \; >/dev/null 2>&1 )
05 1 * * * root ( find /opt/Tomcat/logs -name \*log\* ! -name \*.gz -mtime +1 -exec gzip {} \; >/dev/null 2>&1 )
5
DeBaan

En outre, vous pouvez ajouter crons à la place logrotate de code dur.

1 0 * * * /usr/bin/find /var/log/Tomcat/ -mtime +30 -delete
2 0 * * * /usr/bin/find /var/log/Tomcat/ -mtime +1 -exec gzip -q {} \;

De cette façon, vous supprimerez les journaux de plus de 30 jours et compresserez les journaux de plus de 1 jour.

2
Jhoval

Pour inclure une date dans le fichier pivoté, vous pouvez probablement utiliser l'option 'dateext'.

$ cat logrotate.conf 
/var/nginx/logs/access.log {
    size 10k
    copytruncate
    dateext
    rotate 10
    compress
}

Le fichier pivoté doit être créé comme ci-dessous

 root@nitpc:~# ls -lrt /var/nginx/logs/access.*
-rw-r--r-- 1 nginx root 5422 May 31 08:26 access.log
-rw-r--r-- 1 nginx root  466 May 31 08:26 access.log-20180531.gz

Le seul inconvénient est que vous ne pourrez pas l'exécuter plus d'une fois par jour car le fichier aura un nom précis pour cette date.

L'exemple ci-dessus provient de mon conteneur Docker Nginx fonctionnant en k8 sur GC. La version logrotate est 3.11.0.

J'espère que cela pourra aider!

Mise à jour: à partir des pages de manuel https://linux.die.net/man/8/logrotate

format de date chaîne de format

Spécifiez l'extension pour dateext en utilisant la notation similaire à la fonction strftime (3). Seuls les spécificateurs% Y% m% d et% s sont autorisés. La valeur par défaut est -% Y% m% d. Notez que le caractère séparant le nom du journal de l'extension fait également partie de la chaîne de format de date. L'horloge système doit être réglée après le 9 septembre 2001 pour que% s fonctionne correctement. Notez que les horodatages générés par ce format doivent être triables lexicalement (c.-à-d. D'abord l'année, puis le mois puis le jour. Par exemple, 2001/12/01 est correct, mais 01/12/2001 ne l'est pas, car 01/11/2002 trierait plus bas alors qu'il est plus tard). En effet, lorsque vous utilisez l'option de rotation, logrotate trie tous les noms de fichiers pivotés pour savoir quels fichiers journaux sont plus anciens et doivent être supprimés.

2
Nitb

/path/to/logs/*.log {missingok compress rotation 7}

ce type de chose ne fonctionne pas normalement car, comme d'autres le soulignent, Tomcat a sa propre rotation des journaux. Vous pouvez soit utiliser un simple cron pour supprimer les anciens fichiers ou désactiver la rotation sur le journal d'accès Valve. En désactivant la rotation des journaux (et en modifiant éventuellement le motif du nom de fichier), le logrotate ci-dessus et d'autres configurations similaires fonctionneront correctement.

En fin de compte, vous devez utiliser logrotate ou la rotation des journaux intégrée dans Tomcat, mais pas les deux en même temps.

2
dres

Vous pouvez probablement supprimer la date des noms de fichier journal comme décrit dans Comment supprimer le modèle de date des journaux Tomcat pour pouvoir utiliser les règles de rotation du journal.

Cela a fonctionné pour moi au moins pour le journal d'accès localhost.

1
geekQ

Eh bien, je n'étais pas entièrement satisfait de l'une des réponses, même si celles indiquant que le logrotate ne prend pas cela en charge (c'est-à-dire juste pour supprimer les fichiers tournés par d'autres application ) sont sûrement corrects (lancer une requête de fonctionnalité sur cet outil, peut-être?).

Je voudrais donc partager une approche alternative à laquelle je suis parvenu. Contrairement à la solution "find /path/to/logs -mtime +7 -delete", celle-ci ne supprimera pas tous les anciens journaux après une période de temps spécifiée . Voici donc un exemple de commande bash à une ligne qui ne laisse que N derniers journaux sur le disque ( chaque fois qu'il est exécuté):

for f in `ls -1r | grep -E "^catalina\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.log$" | tail -n +$((N+1))`; do rm $f; done

Enfin, pour couvrir complètement le sujet, la dernière solution alternative n'est pas de faire tourner les fichiers journaux (par exemple, utilisez rotatable=false Dans le cas de Tomcat - voir ses documents) et utilisez le logrotate comme d'habitude, mais n'oubliez pas de l'utiliser avec l'option 'copytruncate' .

Les suggestions sont les bienvenues ...

1
Petr Bodnár

Pour activer la rotation quotidienne des journaux dans Tomcat [linux] avec le suffixe de date dans le fichier catalina, effectuez les modifications ci-dessous.

Téléchargez le package cronolog et installez-le sous Linux OS

wget http://pkgs.fedoraproject.org/repo/pkgs/cronolog/cronolog-1.6.2.tar.gz/md5/a44564fd5a5b061a5691b9a837d04979/cronolog-1.6.2.tar.gz

tar -zxvf cronolog-1.6.2.tar.gz
./configure
make
make install 

ouvrez le fichier Apache-Tomcat-7.0.65/bin/catalina.sh à l'aide de la commande vi et modifiez les lignes comme indiqué ci-dessous: /opt/Apache-Tomcat-7.0.65/bin/catalina.sh

shift
touch "$CATALINA_OUT"
# comment above line as below 
#touch "$CATALINA_OUT"
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
  echo "Using Security Manager"
fi
shift
eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $Java_OPTS $CATALINA_OPTS \
  -Djava.endorsed.dirs="\"$Java_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
  -Djava.security.manager \
  -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
  -Dcatalina.base="\"$CATALINA_BASE\"" \
  -Dcatalina.home="\"$CATALINA_HOME\"" \
  -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  org.Apache.catalina.startup.Bootstrap "$@" start \
  #>> "$CATALINA_OUT" 2>&1 "&"
  # comment above line and add below given line
2>&1 |/usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" &
else
eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $Java_OPTS $CATALINA_OPTS \
  -Djava.endorsed.dirs="\"$Java_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
  -Dcatalina.base="\"$CATALINA_BASE\"" \
  -Dcatalina.home="\"$CATALINA_HOME\"" \
  -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  org.Apache.catalina.startup.Bootstrap "$@" start \
  #>> "$CATALINA_OUT" 2>&1 "&"         
  # comment above line and add below given line
2>&1 |/usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" &
fi

Après les modifications ci-dessus, enregistrez le fichier et redémarrez le Tomcat pour appliquer les modifications.

0

Dans votre fichier de rotation des journaux, utilisez rotate #, où # est le nombre de journaux que vous souhaitez conserver avant de les supprimer.

faire tourner le compte

Les fichiers journaux subissent une rotation avant d'être supprimés ou envoyés à l'adresse indiquée dans une directive mail. Si le nombre est 0, les anciennes versions sont supprimées plutôt que tournées.

0
Paul Armstrong