logrotate는 / var / log / messages를 압축하지 않습니다 rotated file dateext # uncomment

시간이지나면서 나는 몇 가지 로그주의 /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하면 도움 이 될지 궁금합니다 . 나는 그것을 활성화하고 다음날 아침 결과를 확인할 것입니다.



답변

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
   }


답변

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

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

logrotate -d /etc/logrotate.conf

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

logrotate -d /etc/logrotate.d/messages

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


답변

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


답변