프로세스가 계속 실행되는 동안 로그 파일 순환

프로세스가 계속 실행되는 동안 로그 파일 순환

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 옵션을 사용할 때 이전 파일을 자르고 프로세스에 동일한 파일에 쓰도록 지시하는 데 약간의 지연이 있기 때문에 일부 로그 줄이 손실될 수 있습니다. 밀리초마다 로그를 작성하는 일부 애플리케이션에는 적합하지 않습니다.

관련 정보