이것은 다음과 같은 맥락이다.아직 생성되지 않은 파일의 테일링을 시작하는 방법반전: 해당 이름의 파일이 이미 존재합니다.
여러 번 실행되는 프로그램이 있습니다. 출력 파일 이름이 이미 사용 중이면 _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
다른 의미를 부여하는 a를 사용하고 있거나 -F
(해당 플래그는 나중에 GNU에 의해 복사되는 BSD 확장임) 버전이 버그가 있습니까? tail --follow=name --retry
(GNU 테일 대체 구문) 또는 xtail
(전체 디렉토리를 테일링)을 시도해 볼 수도 있습니다 .