logrotate는 app.log 대신 이전 app.log.1을 작성합니다.

logrotate는 app.log 대신 이전 app.log.1을 작성합니다.

로깅을 위해 syslog를 사용하는 사용자 정의 애플리케이션이 있습니다. 이제 logrotate에 문제가 있습니다. 로그는 urls.log 대신 urls.log.1에 기록되고, logrotate는 회전 후 url.log를 생성하지 않습니다. Ubuntu 14.04 LTS 서버를 사용하고 있습니다. 회전 후에 logrotate가 urls.log를 생성하도록 하려면 어떻게 해야 합니까?

logrotate 구성(/etc/logrotate.d/rsyslog)

/usr/local/app/log/urls.log
{
        rotate 10
        daily
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        su app app
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

수동으로 urls.log.1을 urls.log로 mv하고 force logrotate를 실행하면 이것이 출력됩니다.

considering log /usr/local/app/log/urls.log
  log needs rotating
rotating log /usr/local/app/log/urls.log, log->rotateCount is 10
dateext suffix '-20170228'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
switching uid to 1000 and gid to 1000
renaming /usr/local/app/log/urls.log.10.gz to /usr/local/app/log/urls.log.11.gz (rotatecount 10, logstart 1, i 10), 
renaming /usr/local/app/log/urls.log.9.gz to /usr/local/app/log/urls.log.10.gz (rotatecount 10, logstart 1, i 9), 
renaming /usr/local/app/log/urls.log.8.gz to /usr/local/app/log/urls.log.9.gz (rotatecount 10, logstart 1, i 8), 
renaming /usr/local/app/log/urls.log.7.gz to /usr/local/app/log/urls.log.8.gz (rotatecount 10, logstart 1, i 7), 
renaming /usr/local/app/log/urls.log.6.gz to /usr/local/app/log/urls.log.7.gz (rotatecount 10, logstart 1, i 6), 
renaming /usr/local/app/log/urls.log.5.gz to /usr/local/app/log/urls.log.6.gz (rotatecount 10, logstart 1, i 5), 
renaming /usr/local/app/log/urls.log.4.gz to /usr/local/app/log/urls.log.5.gz (rotatecount 10, logstart 1, i 4), 
renaming /usr/local/app/log/urls.log.3.gz to /usr/local/app/log/urls.log.4.gz (rotatecount 10, logstart 1, i 3), 
renaming /usr/local/app/log/urls.log.2.gz to /usr/local/app/log/urls.log.3.gz (rotatecount 10, logstart 1, i 2), 
renaming /usr/local/app/log/urls.log.1.gz to /usr/local/app/log/urls.log.2.gz (rotatecount 10, logstart 1, i 1), 
renaming /usr/local/app/log/urls.log.0.gz to /usr/local/app/log/urls.log.1.gz (rotatecount 10, logstart 1, i 0), 
old log /usr/local/app/log/urls.log.0.gz does not exist
renaming /usr/local/app/log/urls.log to /usr/local/app/log/urls.log.1
running postrotate script
switching euid to 0 and egid to 0
removing old log /usr/local/app/log/urls.log.11.gz
switching euid to 0 and egid to 0

logrotate를 다시 강제 실행하면 이것이 출력됩니다.

    rotating pattern: /usr/local/app/log/urls.log 
 forced from command line (100 rotations)
empty log files are not rotated, old logs are removed
switching euid to 1000 and egid to 1000
considering log /usr/local/app/log/urls.log  
  log /usr/local/app/log/urls.log does not exist -- skipping  ## urls.log is not creating
not running postrotate script, since no logs were rotated
switching euid to 0 and egid to 0

답변1

다음 copytruncate옵션을 사용할 수 있습니다.

copytruncate

일부 프로그램에서 해당 로그 파일을 닫도록 지시할 수 없어 계속해서 쓸 수 있는 경우(추가) 이전 로그 파일을 이동하고 선택적으로 새 로그 파일을 생성하는 대신 복사본을 생성한 후 원래 로그 파일을 그 자리에서 자릅니다. ) to 이전 로그 파일을 영원히 보관합니다. 파일 복사와 자르기 사이의 시간 간격은 매우 짧으므로 일부 로깅 데이터가 손실될 수 있습니다. [...]

이 옵션을 사용하면가능한비트를 사용할 필요는 없습니다 postrotate.

관련 정보