stdout 및 stderr을 로그 파일에 기록하는 프로세스를 실행 중입니다 /var/log/dragonturtle.log
. 로그 파일을 순환하고 프로세스를 종료하지 않고 프로세스가 새 로그 파일을 계속 쓰도록 하는 방법이 있습니까?
현재 무슨 일이 일어나고 있는지(아래 logrotate 구성에 따라):
- 프로세스 쓰기
/var/log/dragonturtle.log
- 로그로테이션
/var/log/dragonturtle.log
이동/var/log/dragonturtle.log.1
- 계속해서 쓰는 과정
/var/log/dragonturtle.log.1
내가 원하는 일:
- 프로세스 쓰기
/var/log/dragonturtle.log
/var/log/dragonturtle.log
다음 으로 복사 :/var/log/dragonturtle.log.1
- 로그 회전 잘림
/var/log/dragonturtle.log
- 계속해서 쓰는 과정
/var/log/dragonturtle.log
/etc/logrotate.d/dragonturtle
:
/var/log/dragonturtle.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 644 dragonturtle dragonturtle
}
답변1
logrotate
설명하는 작업을 수행하는 옵션은 copytruncate
이 옵션을 기존 logrotate 구성에 추가하는 것입니다. 다음은 logrotate.conf 매뉴얼에서 발췌한 것입니다:
copytruncate
Truncate the original log file in place after creating a copy,
instead of moving the old log file and optionally creating a new
one, It can be used when some program can not be told to close
its logfile and thus might continue writing (appending) to the
previous log file forever. Note that there is a very small time
slice between copying the file and truncating it, so some log-
ging data might be lost. When this option is used, the create
option will have no effect, as the old log file stays in place.
답변2
logrotate conf 파일에서 copytruncate 옵션을 사용할 때 이전 파일을 자르고 프로세스에 동일한 파일에 쓰도록 지시하는 데 약간의 지연이 있기 때문에 일부 로그 줄이 손실될 수 있습니다. 밀리초마다 로그를 작성하는 일부 애플리케이션에는 적합하지 않습니다.