이전 이름으로 새 파일 추적

이전 이름으로 새 파일 추적

이 함께아직 생성되지 않은 파일 추적을 시작하는 방법한 가지 차이점이 있습니다. 해당 이름의 파일이 이미 존재한다는 것입니다.

여러 번 실행되는 프로그램이 있습니다. 출력 파일 이름이 이미 사용된 경우 _XYZ파일 확장자 앞에 가장 작은 정수를 삽입하여 XYZ기존 파일의 이름을 바꿉니다 .예를 들어, output.out가 되거나 이미 존재 하는 경우 output_001.out등 ) 기본 이름으로 새 출력 파일을 생성합니다.output_002.outoutput_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다른 의미를 가지고 있거나 -F(플래그는 나중에 GNU에 의해 복사된 BSD 확장임), 아니면 당신의 버전에 버그가 있을 수도 있습니다. tail --follow=name --retry(GNU tail 대체 구문) 또는 xtail(전체 디렉토리 추적)을 시도할 수도 있습니다 .

관련 정보