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?

Šimon Tóth
la source

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

impythonique
la source
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.

Jason
la source
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.

jmtd
la source