tail -f, sem usar polling

1

Estou procurando a maneira mais eficiente de fazer o backup de um arquivo usando o Node.js.

Existem algumas bibliotecas que fazem isso, mas elas parecem usar o polling quando pedem um intervalo para verificar se há alterações no arquivo.

Eu estou querendo saber se eu posso apenas gerar um processo que faz o tail -f e ler o stdout desse processo. Alguém sabe se o comando tail -f em uma máquina linux usa polling ou de alguma forma se conecta a observables de nível inferior? Como funciona a cauda?

No Node.js, posso fazer isso:

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;


};

mas eu estou querendo saber se existe uma maneira mais eficiente de fazer isso

    
por Alexander Mills 24.12.2016 / 23:31

1 resposta

6

No Linux, a versão GNU do kernel coil de tail usa inotify para bloquear a espera de alterações no arquivo. Com o FreeBSD, tail usa o kevent para fazer o mesmo. Isso será melhor do que verificar repetidamente se há alterações e dormir. Dependendo da frequência com que você precisa fazer isso e da frequência com que as mudanças ocorrem, pode ou não valer a pena gerar um processo externo a partir de node.js, apenas para chamar tail .

Se você não estiver usando Linux ou FreeBSD (ou possivelmente MacOS?), o utilitário tail provavelmente não é melhor do que o que você pode fazer diretamente em JavaScript, verificando e dormindo repetidamente.

Alternativamente, se você estiver usando Linux ou FreeBSD, você pode usar inotify ou kevent diretamente de node.js com algum tipo de extensão / plugin / módulo sem gerar um processo. Eu não sei se isso existe.

    
por 24.12.2016 / 23:47

Tags