我希望能够同时追踪多个远程文件,并在同一时间内对这些文件的统计数据进行聚合。目前,我的方法如下:
mkfifo mfifo
ssh -ft host1 'tail -f /path/to/log | grep something' > mfifo &
ssh -ft host2 'tail -f /path/to/log | grep something' > mfifo &
ssh -ft host3 'tail -f /path/to/log | grep something' > mfifo &
cat mfifo | awk '{x += $4; print $3} END {printf "total: %d", x}'
这基本上可以正常工作,通过awk流传来了经过grep处理的日志的聚合。但是,我不确定如何打印最终总计数。我知道我需要关闭fifo的写入器,但我不确定如何做到这一点。有没有建议可以在不将整个流存储为文件的情况下完成这一点?
tail -f
进程都会无限循环并附加到fifo,因此必须将它们杀死。如果每个ssh
被杀死,则应该发生这种情况。可以使用(在Mac OS X上)类似于killall -t yourtty ssh
(运行tty
以查找设备)或通过解析大多数系统上的ps | grep ssh
来找到ssh
进程ID。 - Kevin Grant