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