실제로 네트워크 포트인 파일을 만듭니다.

실제로 네트워크 포트인 파일을 만듭니다.

클러스터에서 실행되는 프로그램이 있고 프로그램의 출력이 내가 지정한 로그 파일에 기록됩니다. 그런데 파일에 쓰는 대신 Node.js 등을 이용해 읽을 수 있도록 네트워크 포트에 쓰고 싶습니다.

예를 들어 /dev/127.0.0.1:3000 줄로 파일을 지정할 수 있기를 원합니다.

현재 저는 Node.js를 사용하여 로그 파일을 모니터링하고, 데이터가 변경되면 모든 데이터를 다시 읽고, 새 데이터와 이전 데이터를 비교하여 추가된 내용을 확인한 다음 처리합니다. 하지만 이는 상당히 비효율적이다.

답변1

프로그램이 파일을 다시 생성하지 않고(파일을 열어서) 기록하는 경우 파일을 파이프로 생성하여 이를 수행할 수 있습니다.

mkfifo potato.log

파일에 쓰는 것처럼 파이프에 메시지를 보낼 수 있습니다.

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

그리고 읽어보세요:

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

실제로 TCP 소켓으로 전달하려면 다음을 수행할 수 있습니다.

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

매우 강력하지는 않을 수도 있지만 socat(원격 TCP와의 연결 끊김을 처리하는) 대신 프로그램을 작성하면 더욱 강력한 작업을 수행할 수 있습니다.

(소켓 기반 로깅에 대한 기본 지원을 얻기 위해 프로그램을 수정할 수 있는 경우 이 모든 것이 필요하지 않습니다.)

관련 정보