Puis-je utiliser logrotate pour compresser les journaux quotidiens (date nommée)?


8

J'ai des journaux au format suivant: AAAAMMJJ

Je veux compresser les anciens journaux (plus anciens que le jour actuel) et peut-être les déplacer vers un répertoire différent par la suite.

Puis-je le faire dans logrotate, ou dois-je utiliser un script personnalisé dans cron?

Réponses:


4

Voici un script rapide qui fera ce dont vous avez besoin:

#!/bin/bash
LOGDIR=/var/log/somedir
OLDLOGS=/var/log/keep-old-logs-here
PATH=/bin:$PATH
TODAY=$(date +'%Y%m%d')

[ -d $OLDLOGS ] || mkdir -p $OLDLOGS

cd $LOGDIR

for LOG in $(ls | egrep '^[[:digit:]]{8}$'); do
    [ $LOG -lt $TODAY ] && gzip $LOG && mv $LOG.gz 
done

Rendez le script exécutable:

$ chmod +x /where/you/put/this/script

L'entrée crontab ressemblera à:

30 0 * * * /where/you/put/this/script

Ajustez simplement LOGDIRet OLDLOGDIR. À 12 h 30, tous les journaux seront déplacés au format AAAAMMJJ pour les jours précédents (et précédents, le cas échéant).


4
Oui, mais cela ne répond pas vraiment à ma question. Ma question était de savoir si je peux utiliser logrotate pour cela.
Šimon Tóth

@Let_Me_Be - Je pensais que c'était implicite dans ma réponse. Non, logrotate ne fera pas exactement ce que vous voulez. Autrement dit, vous ne pouvez pas uniquement faire correspondre les fichiers YYYYMMDD. Sinon , vous pouvez venir à proximité en utilisant nodateext, olddir, compresset dailyoptions.
unpythonic

3

logrotate peut le faire avec olddir si le nom de votre fichier journal est le même à chaque exécution et que vous pouvez ajouter des dates. Si le nom de votre fichier journal change, par exemple AAAAMMJJ, logrotate ne le fera pas pour vous.

# sample logrotate conf file
copytruncate
compress
dateformat %Y%m%d.
dateext
extension log
olddir ./logarchive

/logs/sys.log {
    rotate 7
    daily
}

Copies and gzips /logs/sys.log to /logs/logarchive/sys.20120101.log.gz, conserve une semaine de journaux.


1
Ce n'est pas la réponse. Les journaux ont déjà des horodatages et sont effectivement tournés Let_Me_Be veut juste les compresser. Je pense que @jmtd a raison.
andrew lorien

2

logrotatelui-même ne fait pas cela. Je recommanderais d'écrire un script supplémentaire et de l'invoquer en logrotateutilisant l' postrotateoption dans la configuration.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.