nfs 마운트 지점의 로그 파일에 로그를 기록하는 장치가 있습니다. 동일한 로그 파일에 "영원히" 기록하므로 파일 크기가 매우 커집니다.
더 작은 일일 로그 파일을 갖도록 로그 회전(다른 nfs 클라이언트에서 실행)을 수행하는 스크립트가 있습니다. 로그 회전이 완료되면 장치의 파일 포인터가 파일의 시작 부분을 가리키도록 강제하여 장치가 로그 파일의 시작 부분에서 다시 쓰기 시작하도록 하고 싶습니다.
이를 위해서는 nfs 클라이언트가 로그 회전을 수행하고 로그 파일에서 "뭔가"를 수행해야 하며(무엇인지는 확실하지 않음) 다른 nfs 클라이언트(장치에 쓰기)가 파일 포인터를 파일의 시작 부분으로 설정하도록 강제합니다.
내 이해는 각 nfs 클라이언트가 자체 파일 포인터를 독립적으로 유지 관리하기 때문에 이것이 불가능하다는 것입니다.
내가 잘못? 이것이 가능합니까?
답변1
일반적으로 로그 회전을 위해서는 로그 파일에 쓰고 있는 프로세스를 종료해야 합니다. 이 명령에 대한 매뉴얼 페이지가 logrotate
도움이 될 수 있습니다.
기록되는 장치도 Unix 또는 Linux 유형 시스템이라고 가정하면 파일을 기록하는 프로세스는 파일이 닫힐 때까지 파일에 데이터를 계속 기록합니다. NFS 서버에서 파일이 삭제되거나 이름이 바뀌더라도 프로세스는 계속해서 파일에 씁니다.
내 이해는 각 nfs 클라이언트가 자체 파일 포인터를 독립적으로 유지 관리하기 때문에 이것이 불가능하다는 것입니다.
귀하의 이해는 일반적으로 정확하지만 모든 프로세스가 동일한 시스템에 있고 NFS가 관련되지 않은 경우에도 마찬가지입니다.
이것이 Unix/Linux 시스템에서 I/O 하위 시스템이 작동하는 방식입니다. 프로세스에서 파일 포인터를 강제로 수정할 수는 없습니다.
그러나 NFS 클라이언트와 서버 사이에 프록시를 배치할 수 있는 경우 프록시는 파일을 닫고 회전할 수 있는 충분한 시간을 두고 데이터를 버퍼링하거나 임시 파일로 리디렉션할 수 있습니다. NFS 프록시의 예는 NFSex입니다.http://nfsex.sourceforge.net/Windows용 NFS 미리 읽기 및 뒤에 쓰기를 구현하지만 해당 페이지의 다이어그램에 아이디어가 나와 있습니다. 내 누군가가 이 작업을 수행했으며 합리적으로 보이지만 구현에 대해 알지 못합니다.