回答:
以下は、必要なことを実行するクイックスクリプトです。
#!/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
スクリプトを実行可能にします。
$ chmod +x /where/you/put/this/script
crontabエントリは次のようになります。
30 0 * * * /where/you/put/this/script
ただ、調整LOGDIR
とOLDLOGDIR
。午前12時30分に、すべてのログを前の(ある場合はそれより前の)日のYYYYMMDD形式で移動します。
nodateext
、olddir
、compress
、およびdaily
オプション。
logrotateは、実行するたびにログファイル名が同じで日付を追加できる場合、olddirを使用してそれを実行できます。ログファイル名が変更された場合、つまりYYYYMMDDの場合、logrotateはそれを行いません。
# sample logrotate conf file
copytruncate
compress
dateformat %Y%m%d.
dateext
extension log
olddir ./logarchive
/logs/sys.log {
rotate 7
daily
}
/logs/sys.logを/logs/logarchive/sys.20120101.log.gzにコピーしてgzipすると、1週間分のログが保持されます。