logrotate를 사용하여 일일(지정된 날짜) 로그를 압축할 수 있나요?

logrotate를 사용하여 일일(지정된 날짜) 로그를 압축할 수 있나요?

내 로그 형식은 다음과 같습니다: YYYYMMDD

오래된 로그(현재 날짜보다 오래된)를 압축한 다음 다른 디렉터리로 이동하고 싶습니다.

logrotate에서 이 작업을 수행할 수 있습니까? 아니면 cron에서 사용자 정의 스크립트를 사용해야 합니까?

답변1

로그 파일 이름이 실행할 때마다 동일하고 날짜를 추가할 수 있는 경우 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하여 일주일 분량의 로그를 보관합니다.

답변2

다음은 필요한 작업을 수행하는 빠른 스크립트입니다.

#!/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 형식으로 이동합니다.

답변3

logrotate그 자체로는 이 작업을 수행하지 않습니다. 보충 스크립트를 작성하고 구성의 옵션을 logrotate사용하여 호출하는 것이 좋습니다 .postrotate

관련 정보