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.
(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.
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.
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 )
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.
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.
/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.
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.
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 ...
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
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.
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.