logrorate 에서 파일이동시에 write daemon 의 FD 파일이 바뀌는 현상이 있습니다.

trymp의 이미지

log 를 write 하는 daemon 이 있다고 가정합니다.

fopen() -> fwrite() 을 이용해서..

이렇게 지속적으로 로그를 쌓고 있을 때 logrotate 를 이용해서 5M 단위로 ..

logA.1 logA.2 ... 이런식으로 파일을 size별로 나눌 때,

간혹가다가 보면 write 하는 daemon 이 logA 에 다가 쌓아야 하는데,

logA.1 에다가 파일을 쌓고 있습니다.

lsof 로 보니 write 하는 데몬의 FD 가 logA 를 가르키지 않고 logA.1 을 가르키더군요.

어떻게 이런일이 가능하죠???

고수님들의 의견 부탁드려요..

trymp의 이미지

..

bacon의 이미지

open을 하고 한번만 계속 사용하기 때문에 파일디스크립터는 동일한 파일개체와 연결이 되어 있습니다. 이 파일개체의 이름이 바뀐것일뿐, 파일디스크립터에는 영향을 주지 않죠. 여러방법이 있겠지만 제일 간단하게는, logrotate에 copytruncate옵션을 사용하면 되겠습니다.