tail -f, 폴링을 사용하지 않음

tail -f, 폴링을 사용하지 않음

Node.js를 사용하여 파일을 추적하는 가장 효율적인 방법을 찾고 있습니다.

이를 수행하는 일부 라이브러리가 있지만 파일 변경 사항을 확인하는 데 시간 간격이 필요하므로 폴링을 사용하는 것 같습니다.

tail -f를 수행하고 해당 프로세스의 표준 출력을 읽는 프로세스를 생성할 수 있는지 궁금합니다. Linux 시스템의 tail -f 명령이 폴링을 사용하는지 아니면 어떻게든 낮은 수준의 관찰 가능 항목에 연결되는지 아는 사람이 있습니까? tail -f는 어떻게 작동하나요?

Node.js에서는 다음을 수행할 수 있습니다.

const cp = require('child_process');

module.exports = function(file){

    const n = cp.spawn('tail',['-f',file]);

    n.on('error', function(err){
        console.error(err.stack || err);
    });

    return n.stdout;


};

하지만 이 작업을 수행하는 더 효율적인 방법이 있는지 알고 싶습니다.

답변1

Linux에서 GNU coreutils 버전은 다음을 tail사용합니다.inotify파일 변경을 기다리는 것을 차단합니다. FreeBSD의 경우 tail다음을 사용하세요 .크웬트같은 일을하십시오. 변화를 반복해서 확인하고 잠을 자는 것보다 이것이 더 좋습니다. 이 작업을 수행해야 하는 빈도와 상황이 변경되는 빈도에 따라 node.js에서 를 호출하기 위해 외부 프로세스를 생성하는 것이 가치가 있을 수도 있고 그렇지 않을 수도 있습니다 tail.

Linux나 FreeBSD(또는 MacOS?)를 사용하지 않는 경우 이 tail유틸리티는 JavaScript에서 반복적인 검사와 절전 모드를 통해 직접 수행할 수 있는 것보다 나을 것이 없습니다.

또는 Linux 또는 FreeBSD를 사용하는 경우 프로세스를 생성하지 않고 일부 확장/플러그인/모듈을 사용하여 Node.js에서 직접 inotify사용할 수 있습니다. kevent이것이 존재하는지 모르겠습니다.

관련 정보