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
이것이 존재하는지 모르겠습니다.