Fichiers Logrotate avec la date dans le nom du fichier

j'essaie de configurer logrotate dans RHEL pour les logs tomcat6. Actuellement, le logrotate fonctionne très bien pour catalina.journaux, il est tourné et comprimé correctement.

le problème est avec les fichiers avec la date comme:

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

ces fichiers ne font pas l'objet d'une rotation. Je comprends que je dois configurer dans /etc/logrotate.d/tomcat6 fichier là où la rotation de catalina.est configuré. Mais je ne suis pas capable de le configurer.

Tout ce que je veux, c'est que ces vieux fichiers soient compressés quotidiennement, sauf le fichier journal de date actuel.

est-ce que quelqu'un peut m'aider, s'il vous plaît!!

Merci Noman A.

23
demandé sur Noman Amir 2012-01-22 20:13:04

10 réponses

(premier post jamais donc si elle ressemble à une araignée ivre a formaté alors désolé)

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

j'ai de la suite 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 croyais être parfaitement raisonnable. Mais après qu'il a refusé de travailler et en découvrant qu'il ne fonctionnerait jamais (courtoisie de ce post) je me suis demandé si elle pourrait être futé pour le faire fonctionner.

après beaucoup de tests et de retouches, j'ai réussi à le caresser 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 de logrotate appelé /etc/logrotate.d / local-rsync. Puis créez le fichier journal fictif:

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

attendez demain matin...

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

Bonus avec le fichier dummy est qu'il ne prend pas de place!

Vous pouvez constater qu'il ne semble pas avoir tourné quelque chose un jour. Il m'a fallu du temps pour le travail pourquoi, mais ensuite il a compris. find-mtime +1 correspond à des journées entières (soit 24*60 minutes) et si le logrotate quotidien a fonctionné en moins de 24 heures depuis la dernière fois où les logs ont été créés, il semble parfois qu'il n'ait pas fonctionné. Si cela vous dérange, alors utiliser 23 heures avec find-mmin +1380 pourrait être plus approprié.

33
répondu northern-bradley 2014-04-16 11:51:19

j'ai passé un bon moment à 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 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

le deuxième et plus rapide façon est d'utiliser votre propre petit script pour faire le travail pour vous, à l'aide de find . https://serverfault.com/questions/256218/logrotation-when-filenames-includes-date , https://serverfault.com/a/256231/71120

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

je suis allé avec la deuxième option, parce que nos développeurs ont codé pour les dates dans les noms de fichiers. Il se doit donc d' rester de cette façon. Les ensembles -mtime +5 ne cherchent que les fichiers qui sont plus anciens que 5 jours.

à Partir de find 's de la documentation.

Les données du fichier

ont été modifiées pour la dernière fois il y a 24 heures. Voir les commentaires de-atime pour comprendre comment l'arrondissement affecte l'interprétation des temps de modification des fichiers.

mise à jour selon le commentaire

trouver /pathtologs/* -mtime +5 -supprimer

Si vous souhaitez 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 quelque chose d'autre.

10
répondu nelaaro 2017-04-13 12:13:35

quelque chose comme ceci 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 )
4
répondu DeBaan 2014-03-24 21:57:26

/chemin/vers/logs/*.journal { missingok compresser rotation 7 }

ce type de chose ne fonctionne pas normalement parce que, comme d'autres le font remarquer, tomcat a sa propre rotation des rondins. Vous pouvez soit utiliser un cron simple pour supprimer de vieux fichiers ou désactiver la rotation sur la valve de journal d'accès. En désactivant la rotation des logs (et éventuellement en changeant le nom de fichier patter), le logrotate ci-dessus et d'autres configs similaires fonctionneront parfaitement.

la ligne de fond est vous devez utiliser logrotate ou la rotation logarithmique intégrée dans tomcat, mais pas les deux en même temps.

2
répondu dres 2013-04-02 18:05:01

probablement vous pouvez supprimer la date des noms de fichier log comme décrit dans comment supprimer le motif de date des journaux tomcat pour pouvoir utiliser les règles logrotate.

cela a fonctionné pour moi au moins pour localhost access log.

1
répondu geekQ 2017-05-23 12:03:05

pour activer la rotation quotidienne des logs dans tomcat [linux] avec postfix de date au fichier catalina, faire les changements ci-dessous.

Télécharger cronolog paquet et l'installer dans le système d'exploitation linux

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 

ouvert apache-tomcat-7.0.65/bin/catalina.sh Fichier utilisant la commande vi et modifiez les lignes comme indiqué ci-dessous exemple : /opt/apache-tomcat-7.0.65/bin/catalina.sh

shift
touch "$CATALINA_OUT"
# comment above line as below 
#touch "$CATALINA_OUT"
if [ "" = "-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 changements ci-dessus, sauvegardez le fichier et redémarrez le tomcat pour appliquer les changements.

1
répondu Suresh Telagareddi 2016-04-08 06:00:07

dans votre fichier de rotation des journaux, utilisez rotate # , où # est le nombre de journaux que vous voulez garder avant de les supprimer.

compte de rotation

Les fichiers journaux

font l'objet d'une rotation avant d'être supprimés ou posté à l'adresse spécifiée dans une directive mail. Si count est 0, les anciennes versions sont retirées plutôt que tournées.

0
répondu Paul Armstrong 2012-01-22 16:20:07

Eh bien, je n'ai été entièrement satisfait d'aucune des réponses, même si celles affirmant que le logrotate ne supporte pas cela (I. E. juste pour supprimer les fichiers tournant par une autre application ) scénario sont sûrement corrects (soulever une requête de fonctionnalité sur cet outil, peut-être?).

donc, je voudrais partager une approche alternative, je suis venu à. Contrairement à la " find /path/to/logs -mtime +7 -delete "solution, celle-ci ne supprimera pas tous le vieux journaux après une période de temps spécifiée . Voici donc un exemple de commande de bash à une doublure qui ne laisse que N dernières logs 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 est de ne pas faire tourner les fichiers journaux (E. G. utilisez rotatable=false dans le cas de Tomcat - voir ses docs) et utilisez le logrotate comme d'habitude, mais n'oubliez pas de l'utiliser avec le " copytruncate " option.

les Suggestions sont les bienvenues...

0
répondu Petr Bodnár 2017-12-15 10:02:04

pour inclure une date dans le fichier tournant, vous pouvez probablement utiliser l'option 'dateext'.

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

le fichier tournant doit être créé similaire à 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 aurait un nom défini pour cette date.

l'exemple ci-dessus est tiré de mon conteneur NGINX docker fonctionnant en k8s sur GC. La version de logrotate est 3.11.0.

Espère que ça aide!

mise à jour: De man pages https://linux.die.net/man/8/logrotate

dateformat chaîne de format

spécifie 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 même le caractère de séparation nom du journal de l'extension fait partie de la dateformat chaîne. L'horloge du système doit être réglée au-delà du 9 Septembre 2001 pour que %s fonctionne correctement. Notez que les données générées par ce format doivent être lexicalement sortables (c.-à-d., d'abord l'année, puis le mois, puis le jour). par exemple, 2001/12/01 est ok, mais 01/12/2001 ne l'est pas, puisque 01/11/2002 trierait plus bas pendant qu'il est plus tard). Ceci est dû au fait que lors de l'utilisation de l'option Rotation, logrotate trie tous les noms de fichiers ayant subi une rotation pour trouver les logfiles sont plus âgés et doit être supprimé.

0
répondu Nitb 2018-05-31 12:08:10

aussi, vous pouvez ajouter des crons à la place du logrotate de hardcode.

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 zip les journaux de plus de 1.

0
répondu Jhoval 2018-07-02 18:55:53