tail
여러 원격 컴퓨터에서 로그 파일을 작성 하려고 하고 출력을 로컬 워크 스테이션으로 전달 하려고합니다 . Ctrl-를 누를 때 연결을 닫고 싶습니다 C.
현재 나는 거의 의도 된대로 작동 하는 다음 기능을 가지고 있습니다 .
function dogfight_tail() {
logfile=/var/log/server.log
pids=""
for box in 02 03; do
ssh server-$box tail -f $logfile | grep $1 &
pids="$pids $!"
done
trap 'kill -9 $pids' SIGINT
trap wait
}
연결이 닫히고에서 출력을받습니다 tail
. 그러나 출력이 일괄 처리되기 때문에 일종의 버퍼링이 진행됩니다.
여기 재미있는 부분이 있습니다…
다음을 실행할 때 동일한 버퍼링 동작을 볼 수 /var/log/server.log
있으며 원격 시스템 의 파일 에 "test"를 4-5 번 추가합니다…
ssh server-01 "tail -f /var/log/server.log | grep test"
… 해제하는 두 가지 방법을 찾았습니다…
ssh에 -t 플래그를 추가하십시오.
ssh -t server-01 "tail -f /var/log/server.log | grep test"
원격 명령에서 인용을 제거하십시오.
ssh server-01 tail -f /var/log/server.log | grep test
그러나 이러한 접근 방식 중 어느 것도 위에서 언급 한 여러 시스템에서 실행되는 기능에는 작동하지 않습니다.
실행할 때 동일한 버퍼링 동작을 갖는 dsh를 시도했습니다.
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
따옴표를 제거하면 버퍼링이 사라지고 모든 것이 잘 작동합니다.
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
또한와 parallel-ssh
정확히 동일한 기능을 시도 했습니다 dsh
. 누군가 여기서 무슨 일이 일어나고 있는지 설명 할 수 있습니까?
이 문제를 어떻게 해결합니까? ssh
가능하면 똑바로가는 것이 이상적입니다 .
추신 : 나는 multitail
임의의 명령을 실행할 수 있기를 원하기 때문에 사용 하거나 유사한 것을 원하지 않습니다 .
dbitail
하고 다운로드 할 수 있습니다 .