서로 다른 두 호스트의 추적 로그 파일

서로 다른 두 호스트의 추적 로그 파일

서로 다른 호스트에서 두 개의 로그 파일을 추적하고 결합된 출력을 단일 출력으로 사용하려고 합니다.

ssh HOST_1 "tail -f MY_LOG_FILE"

또한 mkfifo를 사용하여 명명된 파이프를 만듭니다.

mkfifo MY_PIPE

문제는. MY_PIPE에 로컬 명령을 출력하면 제대로 작동하지만 ssh 명령을 출력하면 명명된 파이프에서 아무것도 읽을 수 없습니다(다른 터미널에서 tail -f MY_NAMED_PIPE 사용).

mkfifo MY_PIPE

ssh HOST_1 "tail -f MY_LOG_FILE" > MY_NAMED_PIPE

위 명령은 파이프에서 출력을 생성하지 않습니다.

올바르게 파이프하기 위해 ssh 명령에 대한 인수가 있습니까?

이것을 파이프하는 다른 방법이 있습니까?

답변1

당신은 또한 사용할 수 있습니다추가 옵션 사용(-ㅏ)콘텐츠를 병합합니다.

제1터미널에서

ssh HOST_1 "tail -f /path/to/file" | tee -a /path/to/merged/contents

제2터미널에서

ssh HOST_2 "tail -f /path/to/file" | tee -a /path/to/merged/contents

제3터미널에서

tail -f /path/to/merged/contents

답변2

ssh HOST_1 "tail -f MY_LOG_FILE" > MY_NAMED_PIPE

tail 프로그램은 TTY에 쓰지 않기 때문에 출력을 약 8KB 단위로 버퍼링합니다. MY_LOG_FILE이 활발하지 않은 경우 출력이 표시되지 않는 이유일 수 있습니다. 제대로 작동하더라도 tail은 전체 줄을 한 번에 쓰지 않으므로 여러 tail 인스턴스의 출력이 심각하게 왜곡될 수 있습니다.

sshTTY를 사용하여 tail 명령을 실행할 수 있습니다 . 이로 인해 tail출력이 한 줄씩 버퍼링됩니다. 이렇게 하면 더 나은 결과를 얻을 수 있습니다.

ssh -tt HOST_1 "tail -f MY_LOG_FILE" > MY_NAMED_PIPE

SSH 매뉴얼 페이지를 참조할 수 있습니다.여기.

답변3

방금 다음을 수행했습니다.

mkfifo MY_PIPE
ssh HOST_1 "tail -f /var/log/messages" > MY_PIPE

내 로컬 컴퓨터에서 다음을 실행합니다.

tail -f /var/log/messages > MY_PIPE

로컬 컴퓨터의 다른 터미널에서:

cat < MY_PIPE

원격 및 로컬 명령의 출력이 모두 tail -f /var/log/messages표시됩니다.

내가 따랐던 튜토리얼은리눅스 매거진.

관련 정보