로그를 회전시키지 않는 logrotate


24

이 logrotate 구성이 있으며 Ubuntu 10.04에서 실행 중입니다.

/var/log/mysql/mysql-slow.log {
    daily
    rotate 3
    compress
    notifempty
    missingok
    create 660 mysql adm
    postrotate 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin  ping &>/dev/null
    then
       /usr/bin/mysqladmin  flush-logs
    fi
endscript

}

어제 이것을 /etc/logrotate.d에 넣고 오늘 로그가 회전하지 않았습니다.

아래는 내가 한 것들입니다.

  1. 로그가 실제로 /var/log/mysql/mysql-slow.log에 있는지 확인했습니다.
  2. 루트로 실행할 때 mysqladmin 라인이 제대로 작동
  3. mysql은 mysql-slow.log에 쓸 수있다

내가 이것을했을 때 :

$ logrotate -d -f mysql-slow

reading config file mysql-slow
reading config info for /var/log/mysql/mysql-slow.log 

Handling 1 logs

rotating pattern: /var/log/mysql/mysql-slow.log  forced from command line (3 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mysql/mysql-slow.log

log needs rotating
rotating log /var/log/mysql/mysql-slow.log, log->rotateCount is 3
dateext suffix '-20120329'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/mysql/mysql-slow.log.3.gz to /var/log/mysql/mysql-slow.log.4.gz     (rotatecount 3, logstart 1, i 3), 
renaming /var/log/mysql/mysql-slow.log.2.gz to /var/log/mysql/mysql-slow.log.3.gz (rotatecount 3, logstart 1, i 2), 
renaming /var/log/mysql/mysql-slow.log.1.gz to /var/log/mysql/mysql-slow.log.2.gz (rotatecount 3, logstart 1, i 1), 
renaming /var/log/mysql/mysql-slow.log.0.gz to /var/log/mysql/mysql-slow.log.1.gz (rotatecount 3, logstart 1, i 0), 
renaming /var/log/mysql/mysql-slow.log to /var/log/mysql/mysql-slow.log.1
creating new /var/log/mysql/mysql-slow.log mode = 0660 uid = 20004 gid = 4
running postrotate script
running script (multiple) with arg /var/log/mysql/mysql-slow.log : " 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin &>/dev/null
    then
       /usr/bin/mysqladmin flush-logs
    fi
"
compressing log with: /bin/gzip
removing old log /var/log/mysql/mysql-slow.log.4.gz
  1. logrotate가 성공했음을 나타내는 로그는 어디에 있습니까? 문제가 있다고 말하는 것이 있는지 확인하고 싶습니다.
  2. 왜 logrotate가 작동하지 않는지에 대한 아이디어가 있습니까?

손으로 실행할 때 작동합니까? 되어 crond실행?
Kyle Smith

예, logrotate -f mysql_slow_query를 의미하는 경우 작동합니다. 그리고 크론이 달려 가고 있습니다.
Carmen

해당 로그 파일을 처리해야하는 다른 구성이없는 것이 확실합니까? 아마도 mysql-server? 를 실행하십시오 grep '/var/log/mysql' /etc/logrotate.d/*.
Zoredache

나는 그 명령을 실행했고 내 설정 만 / var / log / mysql에서 뭔가를하는 것으로 나타납니다
Carmen

하루 중 몇시에 매일 cron 작업이 Ubuntu 설정에서 실행됩니까? /etc/crontab파일의 정보는로 끝나는 줄 에서 찾을 수 있습니다 /etc/cron.daily ). 해당 날짜의 cron 일일 작업이 이미 실행 된 후 logrotate 구성을 작성했을 수 있습니까?
ricmarques

답변:


47

일반적인 문제는 매일 logrotate.d 항목을 처음 설정할 때 첫날이 바뀌지 않는 것입니다. 시간 기반 회전 (일별 / 주별 / 월별)을 사용하면 logrotate는 파일을 본 마지막 날짜 /var/lib/logrotate/status(또는 /var/lib/logrotate.statusRHEL 시스템) 의 날짜 스탬프를 낙서합니다 .

스 크라이 블 된 날짜는 향후 실행에서 logrotate'매일'회전을 비교하는 데 사용할 기준 날짜가 됩니다. 기본 크론 작업은 매일 실행되므로 일반적으로 매일 작업에서는 문제가됩니다.

이 문제는 두 가지 방법으로 피할 수 있습니다.

  1. 운영 sudo logrotate -f /etc/logrotate.d/<my rotate job>

    • 이것은 날짜를 상태 파일에 낙서하고 로그를 회전시킵니다.

  2. /var/lib/logrotate/status행을 수동으로 편집 하고 추가하십시오.

    "/var/log/my_special.log" 2013-4-8

    • 오늘 또는 이전 날짜로 설정합니다. 다음 실행으로 인해 실행됩니다.

챔피언처럼 작동합니다!
세스

6
실제로 -f (적어도 RH 파생물에서) 사용할 때 로그를 회전시킵니다 .
bufh

12
-fForce Rotation (강제 회전), -dDebug (디버그)의 경우에도 디버그는 드라이 런을 의미하므로 -d켜져있는 동안 실제로 변경되지 않습니다 .
ThorSummoner

1
-d드라 이런을 암시하는 것은 까다로운 작업입니다. 변경 사항이 없었으며이 사실을 깨달을 때까지 머리를 긁었습니다.
Artem Russakovskii

5

다음 Slicehost 기사에 따르면 :

우분투에서 로그 로테이션 이해-2 부
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2

... /var/lib/logrotate/status"" 는 각 로그 파일이 마지막으로 회전 된시기에 대한 정보를 저장합니다. ". logrotate에 맨 페이지 는 "상태 파일"이라고 말한다.

ServerFault에 유용한 또 다른 토론이 있습니다.

logrotate는 어떻게 "일일"을 정확하게 처리합니까?

이 토론에서 "MadHatter"는 "상태"(상태) 파일에 대해 다음과 같이 말합니다.

"각 파일에는 한 줄이 있습니다.이 날짜는 마지막으로 회전 한 날짜입니다. 현재 날짜와 파일의 날짜 사이의 일 수를 기준으로 지정된 파일이 회전해야하는 날짜에 logrotate를 실행하면 ( 1은 매일, 7은 매주 등) 파일이 회전됩니다. "

이게 도움이 되길 바란다.


0

mysqladmin사용자 또는 비밀번호가 필요한 경우 /root/.my.cnf수정없이 구성 에서 읽지 않습니다 .

출력을 로거로 파이핑하여 무슨 일이 일어나고 있는지 확인하십시오.

  postrotate
      # just if mysqld is really running
      if test -x /usr/bin/mysqladmin && \
         /usr/bin/mysqladmin ping &>/dev/null
      then
         env HOME=/root/ /usr/bin/mysqladmin flush-logs 2>&1 | logger
      else
         logger "mysqladmin ping failed so not rotating mysql logs"
      fi
  endscript

MySQL은 회전 후 새 파일에 오류를 기록하지 않습니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.