【发布时间】:2012-06-28 02:56:16
【问题描述】:
我有兴趣同时关注多个远程文件并同时汇总文件的统计信息。到目前为止,我这样做如下:
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 流式传输的 grepped 日志。但是,我不确定如何打印最终总数。我认为我需要关闭 fifo 的作者,但我不知道该怎么做。关于如何在不将整个流存储为文件的情况下执行此操作的任何建议?
【问题讨论】:
-
存储后台进程的 PID,然后在准备好时终止它们?祝你好运。
-
每个远程主机上的
tail -f进程永远循环并附加到fifo,因此必须将它们杀死。如果每个ssh都被杀死,这应该会发生。ssh进程 ID 可以通过(在 Mac OS X 上)killall -t yourtty ssh(运行tty以查找设备)或在大多数系统上解析ps | grep ssh来找到。 -
为什么不在tail的调用中省略
-f?你怎么知道你想什么时候关闭作家?