私は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
これが存在するかどうかわかりません。