로깅을 위해 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
.