이전 이름으로 새 파일 추적

이전 이름으로 새 파일 추적

이것은 다음과 같은 맥락이다.아직 생성되지 않은 파일의 테일링을 시작하는 방법반전: 해당 이름의 파일이 이미 존재합니다.

여러 번 실행되는 프로그램이 있습니다. 출력 파일 이름이 이미 사용 중이면 _XYZ가장 XYZ작은 정수(예: output.outoutput_001.out, 또는 이미 존재 output_002.out하는 경우 등 output_001.out), 기본 이름으로 새 출력 파일을 생성합니다.

기본 이름을 추적하면 -F기존 파일을 즉시 추적하기 시작하고 파일 이름이 바뀌더라도 새 파일을 무시하고 해당 inode에 대한 핸들을 유지합니다.

프로그램은 대기열 관리 기능을 갖춘 공유 클러스터에서 실행되므로 실행은 길고 가변적인 지연으로 시작됩니다.

새 파일이 먼저 생성될 때까지 기다리지 않고 새 파일을 추적하는 것이 가능합니까? 그렇다면 어떻게?

답변1

tail -F이미 이 작업을 수행해야 합니다.

/tmp/t/file. 그런 다음 터미널 1에서 를 시작 tail -F하고 실행 상태로 둡니다.

anthony@Zia:~$ tail -F /tmp/t/file
a
b
tail: `/tmp/t/file' has become inaccessible: No such file or directory
tail: `/tmp/t/file' has appeared;  following end of new file
c
d

터미널 2에서는 다음과 같이 했습니다.

anthony@Zia:/tmp/t$ echo a >> file
anthony@Zia:/tmp/t$ echo b >> file
anthony@Zia:/tmp/t$ mv -i file file.old; echo c >> file
anthony@Zia:/tmp/t$ echo d >> file

보시다시피 tail -F실제로 inode가 아닌 이름을 따릅니다. 어쩌면 tail다른 의미를 부여하는 a를 사용하고 있거나 -F(해당 플래그는 나중에 GNU에 의해 복사되는 BSD 확장임) 버전이 버그가 있습니까? tail --follow=name --retry(GNU 테일 대체 구문) 또는 xtail(전체 디렉토리를 테일링)을 시도해 볼 수도 있습니다 .

관련 정보