9po*_*nt6 7 linux terminal bash stdout
我有一个终端输出,我希望可供多个用户使用
目前类似:
command > /var/logs
Run Code Online (Sandbox Code Playgroud)
对于输入,以及:
watch tail -30 /var/logs
Run Code Online (Sandbox Code Playgroud)
对于输入端子。
然而,这是不可取的,因为只观察轮询而不是在有更新时输出,并且尾部不允许回滚。
你提出的两个问题:
仅观看民意调查,而不是在有更新时输出
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
应该这样做。