我正在尝试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
远程计算机上的文件4-5次后,我可以看到相同的缓冲行为…
ssh server-01 "tail -f /var/log/server.log | grep test"
……找到了禁用它的两种方法……
将-t标志添加到ssh。
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
如果可能的话,最好是顺子走。
PS我不想使用multitail
或类似的东西,因为我希望能够执行任意命令。
dbitail
从此处结帐并下载。