我有一个终端输出,希望可供多个用户使用
目前的情况如下:
command > /var/logs
作为输入,以及:
watch tail -30 /var/logs
用于输入端子。
然而这是不可取的,因为只观察轮询而不是在有更新时输出,并且尾部不允许回滚。
答案1
您提出的两个问题:
只关注民意调查,而不是在有更新时输出
tail -f
不轮询。从 GNU Coreutils 7.5 版开始,tail -f
将使用 Linux 内核的inotify
接口从内核接收信号,表明文件已被修改。如果您不使用 GNU Coreutils,或者出于某种原因使用 7.5 之前的版本,它将每秒轮询一次。它可能还会在非 Linux POSIX 操作系统(BSD、Solaris 等)上轮询,但您必须根据具体情况进行研究:其中一些操作系统使用 GNU Coreutils,但内核不支持inotify
;其中一些根本不使用 GNU Coreutils 来实现tail
。
尾部不允许回滚
该less
命令专门用于缓冲数据stdin
(例如来自tail
命令)并允许您前后滚动。缓冲区不是无限的,但您可以使用命令行选项来增加或减少缓冲区以及修改缓冲区的后退和前进滚动时间。
所以也许,
tail -f /var/logs | less
将允许您保留日志的回滚缓冲区而无需轮询(tail
只是闲置在那里,不消耗 CPU,直到内核向其发出信号让其知道文件已被修改)。
如果您需要多个用户能够从同一个缓冲区读取数据,那么您可以在会话tail -f /var/logs
中运行screen
。我最初的回答没有考虑到您想要运行这个以便多个用户可以同时看到相同的日志数据。@Let_Me_Be 提到了这一点screen
,然后我突然想到这可能是您最好的选择。
因此,将我的解决方案和@Let_Me_Be 的解决方案放在一起:
screen -mdS logview -- tail -f /var/logs
警告:未经测试。如有错误,请修改。但我认为我们已接近找到正确解决方案的途径。
现在你只需要screen
进入多用户模式。这有点复杂,所以我让这网站本身就说明了一切。要点是您必须添加multiuser on
到您的~/.screenrc
文件中。另请参阅常见问题在该链接的底部。
现在,供用户查看日志:
screen -rS logview
应该这么做。
答案2
screen
您想要一个像或 这样的程序tmux
。