Nginx 로그 파일을 자르던 중 이상한 문제를 발견했습니다. Nginx 로그 파일을 수동으로 이동할 때 구성 파일을 다시 로드하지 않으면 Nginx는 다른 디렉터리로 이동된 로그 파일을 계속해서 작성합니다.
Nginx는 로그를 작성할 때 파일 경로를 사용하지 않나요?
이동한 후에도 로그 파일이 계속 기록될 수 있는 이유는 무엇입니까?
이것은 변수의 수명주기를 관리하는 프로그래밍 언어의 참조 계산과 다소 유사한 파일 시스템의 기능입니다. 파일을 이동하거나 삭제하더라도 파일이 프로세스에 의해 열려 있는 한 파일에 계속 액세스할 수 있습니다. 그러나 파일 이름, 하드 링크 및 파일 핸들(더 이상 프로그램에서 열리지 않음)과 같은 모든 "참조"가 사라지면 파일에 대한 다음 참조가 영향을 받고 "파일을 찾을 수 없음"으로 나타납니다. .
이것은 변수의 수명주기를 관리하는 프로그래밍 언어의 참조 계산과 다소 유사한 파일 시스템의 기능입니다. 파일을 이동하거나 삭제하더라도 파일이 프로세스에 의해 열려 있는 한 파일에 계속 액세스할 수 있습니다. 그러나 파일 이름, 하드 링크 및 파일 핸들(더 이상 프로그램에서 열리지 않음)과 같은 모든 "참조"가 사라지면 파일에 대한 다음 참조가 영향을 받고 "파일을 찾을 수 없음"으로 나타납니다. .
이유는 nginx가 로그 파일을 연 후에는 실제로 시스템에서 inode로 식별되기 때문인 것 같습니다. 파일을 이동해도 inode 번호가 수정되지 않으므로 파일이 계속 기록됩니다.
nginx는 일반적으로 더 빠른 속도를 위해 파일의 inode를 캐시합니다.