3

我有兴趣同时关注几个远程文件并同时聚合文件上的统计信息。到目前为止,我这样做如下:

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 的作者,但我不知道该怎么做。关于如何在不将整个流存储为文件的情况下执行此操作的任何建议?

4

1 回答 1

2

杀死 FIFO 写入器

您可以使用fuser来终止写入文件的进程。例如:

fuser -TERM -k -w mfifo; sleep 5; fuser -k -w mfifo

请注意,fuser 默认发送 SIGKILL,因此给出的示例发送显式 SIGTERM,然后在强制终止进程之前等待 5 秒。这应该允许您的进程自行清理,但可以随意调整调用以适应。

另外,请注意我们传递了 -w 标志,因此 fuser 只会终止具有写访问权限的进程。如果没有这个标志,你也会杀死catawk

于 2012-06-28T06:29:53.373 回答