내 로그 형식은 다음과 같습니다: 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