logrotate는 / var / log / messages를 압축하지 않습니다


11

시간이지나면서 나는 몇 가지 로그주의 /var/log등을 auth, kern그리고 messages거대한지고 있었다. 나는 logrotate그들을 위해 항목을 만들었 습니다.

$ cat /etc/logrotate.d/auth.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/kern.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/messages 
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

또한 compress옵션이 활성화되어 있습니다.

$ grep compress /etc/logrotate.conf 
# uncomment this if you want your log files compressed
compress

이 위대한 작품 auth.log, kern.log그 로그의 각 gzip으로 압축 및 유지 로그의 마지막 오일로, 회전 것을 의미하고, 다른 사람을. /var/log/messages그러나 압축 되지 않아 5 일 이상의 로그가 생성됩니다.

$ ls /var/log/messages*
/var/log/messages           /var/log/messages-20100213
/var/log/messages-20100201  /var/log/messages-20100214
/var/log/messages-20100202  /var/log/messages-20100215
/var/log/messages-20100203  /var/log/messages-20100216
/var/log/messages-20100204  /var/log/messages-20100217
/var/log/messages-20100205  /var/log/messages-20100218
/var/log/messages-20100206  /var/log/messages-20100219
/var/log/messages-20100207  /var/log/messages-20100220
/var/log/messages-20100208  /var/log/messages-20100221
/var/log/messages-20100209  /var/log/messages-20100222
/var/log/messages-20100210  /var/log/messages-20100223
/var/log/messages-20100211  /var/log/messages-20100224
/var/log/messages-20100212

ServerFault 에 대한 다른 logrotate질문에서 설명했듯이 파일 끝은 파일마다 다르기 때문에 이전 로그가 제거되지 않을 가능성이 높습니다. 파일이 압축되지 않았기 때문입니다.

내가 할 수있는이 가지고 /var/log/messages내 다른 로그 파일을 모두 같은 유지 압축 및 로그의 마지막 오일 회전? 내가 무엇을 놓치고 있습니까?

편집 1 : 첫 커플 답변에서 요청한 추가 정보.

젠투 리눅스를 사용하고 있습니다. 내 /etc/logrotate.conf파일 :

$ cat /etc/logrotate.conf 
# $Header: /var/cvsroot/gentoo-x86/app-admin/logrotate/files/logrotate.conf,v 1.3 2008/12/24 20:49:10 dang Exp $
#
# Logrotate default configuration file for Gentoo Linux
#
# See "man logrotate" for details
# rotate log files weekly
weekly
#daily
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
compress
# packages can drop log rotation information into this directory
include /etc/logrotate.d
notifempty
nomail
noolddir
# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

/etc/logrotate.d 위에 언급 한대로 사용자 정의 구성 파일과 해당 패키지로 설치된 mysql, rsync 등의 구성이 포함되어 있습니다.

내 뿌리 crontab는 비어 있습니다 :

$ sudo crontab -l
no crontab for root

/etc/cron.{daily,hourly,monthly,weekly}syslog와 관련된 모든 것을 확인 했으며 회전하는 /var/log/syslog및 스크립트가 /var/log/auth.log있습니다.

다음 으로 CarpeNoctem이 제안한대로 /var/log/messages전용 logrotate구성 파일을 만들었습니다.

$ cat logrotate-messages 
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

그런 다음 logrotate수동으로 실행했습니다 .

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/messages to /var/log/messages-20100224
creating new /var/log/messages mode = 0644 uid = 0 gid = 0
running postrotate script
running script with arg /var/log/messages : "
        /bin/killall -HUP syslogd
"
compressing log with: /bin/gzip
$ which gzip
/bin/gzip
$ file /bin/gzip
/bin/gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

위의 로그에 따르면 logrotate/ bin / gzip으로 로그를 압축했지만에 압축 된 메시지 파일이 표시되지 않습니다 /var/log. 또한 오래된 회전 된 파일을 가져 오는 데 실패했습니다.

편집 2 : 오래된 파일에 접미사를 logrotate추가 한 후 실행의 디버그 출력 추가 ..gz/var/log/message-*

우리는 시작합니다 :

$ ls /var/log/messages*
/var/log/messages              /var/log/messages-20100222.gz
/var/log/messages-20100219.gz  /var/log/messages-20100223.gz
/var/log/messages-20100220.gz  /var/log/messages-20100224.gz
/var/log/messages-20100221.gz

그런 다음 logrotate사용자 정의 구성 파일로 실행 하십시오.

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
removing /var/log/messages-20100219.gz
removing old log /var/log/messages-20100219.gz
destination /var/log/messages-20100224.gz already exists, skipping rotation

이번에는 logrotateglob가 성공하여 6 번째 압축 로그 파일을 찾아 제거하려고합니다. 파일은 실제로 제거되지 않습니다. 디버그 모드에서 실행 중이기 때문입니다.

delaycompress옵션을 활성화 /var/log/messages하면 도움 이 될지 궁금합니다 . 나는 그것을 활성화하고 다음날 아침 결과를 확인할 것입니다.


logrotate.conf를 게시 할 수 있습니까? 지금까지 공유 한 발췌 부분에는 해당 메시지 파일의 날짜 접미사가 설명되어 있지 않습니다. Logrotate는 회전 된 로그 파일에서 날짜 접미사를 지원하는 데 사용되지 않았습니다. 이것은 다른 것이 완전히 그 파일을 만들고 있다고 믿게합니다. / etc / crontab, root의 crontab 및 /etc/cron.daily를 확인하여 동일한 작업을 수행하려는 다른 스크립트가 있는지 확인하십시오.
jmtd

이 외에도, 어떤 리눅스 배포판을 사용하고 있는지 알려주시겠습니까? 데비안 / 우분투에는 로그 로테이션을 할 수있는 자체 로그 로테이션 스크립트가 있습니다.
thepocketwade

답장을 보내 주셔서 감사합니다. 젠투 리눅스를 사용하고 있습니다. 내 crontab은 / var / log / messages를 관리하지 않습니다. 자세한 내용은 내 질문에 새로운 정보를 참조하십시오.
Mike Mazur

답변:


8

delaycompress구성 섹션에 추가 /var/log/messages하여 문제 를 해결했습니다.

보낸 사람 man logrotate:

   delaycompress
          Postpone  compression of the previous log file to the next rota‐
          tion cycle.  This only has effect when used in combination  with
          compress.   It  can  be used when some program cannot be told to
          close its logfile and thus might continue writing to the  previ‐
          ous log file for some time.

내 생각 sysklogd, 내 syslog 데몬은 자사의 로그 파일을 닫습니다 말했다 될 수없고, 따라서이 필요합니다.

흥미롭게도, 내가 (를 빼고 있었다 원래 구성 delaycompress, 지시어)의 똑바로왔다 man logrotate(I 변경 제외 weeklydaily) :

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }

알 수없는 알 수없는 옵션 'delalycompress'# logrotate -v /etc/logrotate.d/apc_rtbinfo.conf 구성 파일 읽기 /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log에 대한 구성 정보 읽기 오류 : /etc/logrotate.d/apc_rtbinfo.conf:7 알 수없는 옵션 'delalycompress'-라인 처리 1 개 무시
Ashish Karpe

# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {매일 missingok notempempty 크기 2000M 압축 delalycompress 공유 스크립트 copytruncate 회전 3}
Ashish Karpe

1
확인 "delalycompress"에 오타 오류가 있었다있어
인 Ashish Karpe

그러나 이제 문제는 log.1이 2000M # du -sh /mnt/log/frengo/apc_rtbinfo.log* 0 /mnt/log/frengo/apc_rtbinfo.log 4.7G /mnt/log/frengo/apc_rtbinfo.log 이상이라는 것입니다. .1 80M /mnt/log/frengo/apc_rtbinfo.log.2 0 /mnt/log/frengo/apc_rtbinfo.log-20151222 679M /mnt/log/frengo/apc_rtbinfo.log-20151225.gz 681M / mnt / log / frengo /apc_rtbinfo.log-20151226.gz 691M /mnt/log/frengo/apc_rtbinfo.log-20151227.gz 0 /mnt/log/frengo/apc_rtbinfo.log-20151228 70M /mnt/log/frengo/apc_rtbinfo.log.2. gz 80M /mnt/log/frengo/apc_rtbinfo.log.3 80M /mnt/log/frengo/apc_rtbinfo.log.4
Ashish Karpe

5

이 정보만으로는 말하기가 어렵지만 몇 번 저를 구한 것이 무엇인지 말해 줄 수 있습니다.

Logrotate에는 stdout에 걸리는 각 단계의 재생을 인쇄하는 디버그 옵션이 있습니다. 따라서이 경우 다음을 수행 할 수 있습니다.

logrotate -d /etc/logrotate.conf

결과는 정확히 무슨 일이 일어나고 있는지 알려줍니다. 또한 디버그 출력을 좁히려면 할 수 있습니다

logrotate -d /etc/logrotate.d/messages

파일을 직접 지정하면 주 구성 옵션을 읽지 않았으므로 해당 파일 블록에 기본 logrotate.conf 옵션을 임시로 배치 할 수 있습니다. 개별 파일을 지정하면 -f디버그 옵션과 함께 (force) 옵션을 사용하여 발생하는 메시지 파일의 실제 회전을 볼 수 있습니다.


제안한대로 수동으로 logrotate를 실행하려고 시도했지만 로그를 압축하고 있다고 알려주지 만 압축 된 로그는 어디에도 없습니다. 자세한 내용은 위의 질문을 참조하십시오.
Mike Mazur

1
가장 오래된 5 개의 메시지 파일 이름을 .gz로 끝내고 logrotate가 가장 오래된 파일을 제거하는지 확인하십시오. 그렇다면 gzip이 올바르게 실행되지 않아 글 로빙이 실패한 것입니다. 이것은 최소한 압축 부족이 회전 부족으로 인한 책임임을 확인시켜 줄 것입니다.
CarpeNoctem

위의 질문에 세부 사항이 추가되었습니다. 라이브 /var/log/messages파일에 경합 문제가 있는지 궁금 하고 delaycompress옵션이 도움이 될 것입니다.
Mike Mazur

내가 알아 낸 또 다른 흥미로운 점. -d 옵션을 활성화하면 logrotate 명령이 로그 파일을 건드리지 않습니다. 자세한 내용은 설명서를 확인하십시오. -d, --debug Turns on debug mode and implies -v. In debug mode, no changes will be made to the logs or to the logrotate state file.
CBR

1

logrotate.conf에서이 설정을 사용해보십시오.

dateformat .%Y%m%d

대시 대신 점을 사용하도록 기존 메시지 파일의 이름을 바꿉니다. 그런 다음 로그 로테이션을 다시 시도하십시오.

아래의 단서는 계기판이 어떻게 든 옵션으로 해석되면 글로브가 실패 할 수 있다고 믿었습니다. 이치에 맞지 않지만 가능할 수도 있습니다.

dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed

나는 이것이 근본 원인이라고 생각하지 않습니다. 대시가있는 현재 날짜 형식은 다른 로그 파일에 적합합니다. 이러한 로그 파일의 차이점 /var/log/messages은 회전 된 /var/log/messages파일이 압축되지 않는다는 것입니다.
Mike Mazur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.