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).
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.
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.
nodateext
,olddir
,compress
etdaily
options.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.
Copies and gzips /logs/sys.log to /logs/logarchive/sys.20120101.log.gz, conserve une semaine de journaux.
la source
logrotate
lui-même ne fait pas cela. Je recommanderais d'écrire un script supplémentaire et de l'invoquer enlogrotate
utilisant l'postrotate
option dans la configuration.la source