Crie um arquivo que seja realmente uma porta de rede

1

Eu tenho um programa em execução em um cluster e a saída do programa é gravada em um arquivo de log que eu especifico. No entanto, em vez de gravá-lo em um arquivo, quero gravá-lo em uma porta de rede, para que ele possa ser lido com, por exemplo, Node.js.

Por exemplo, eu quero ser capaz de especificar um arquivo ao longo das linhas de /dev/127.0.0.1:3000

Atualmente, estou usando o Node.js para assistir ao arquivo de log, reler todos os dados quando eles forem alterados, comparar os novos dados com os dados antigos para ver o que foi adicionado e processá-los. Mas isso é bastante ineficiente.

    
por Nick 06.09.2014 / 00:22

1 resposta

5

Se o seu programa estiver registrando sem recriar o arquivo (abrindo-o), você poderá fazê-lo criando o arquivo como um canal:

mkfifo potato.log

Você pode enviar uma mensagem para o pipe como se estivesse escrevendo no arquivo:

$ # This is the logging process:
$ echo "Warning!" > potato.log

E leia-os:

$ # This is the listener process:
$ cat potato.log
Warning!

Se você realmente quiser encaminhar isso para um soquete TCP, poderá fazer algo como:

$ socat PIPE:potato.log TCP:localhost:3000

Pode não ser muito robusto, mas você deve ser capaz de fazer algo mais robusto escrevendo um programa em vez de socat (manipulando desconexões do TCP remoto).

(tudo isso não é necessário se você puder modificar o programa para ter suporte nativo para criação de log baseada em soquete).

    
por 06.09.2014 / 01:08