我有一个程序,它不断读取输出:
journalctl -o json --follow
并将其发送到另一个进程。虽然它最初从尾部输出日记帐条目,但在运行时,新的条目不会出现在 stdout 上。就好像跟随模式不是在跟随而是停滞了。
为了测试这一点,我运行了两个终端窗口:
journalctl -o json --follow
echo "Hello world" | systemd-cat
x 10 次
我第一次运行 2 时,它似乎跟上了。后续运行 2 时,什么都没有出现。
这是一个大问题。关注不是真的关注吗?
操作系统是 x86_64 上的 Ubuntu 16.04
答案1
可能会发生两件事:
如果你记录了同一行 10 次,重复的行可能会被过滤,请尝试更改 hello world 消息
你用来解析输出的程序
journalctl -f -o json
和 journalctl 本身之间可能存在一些缓冲,请参见查看 journalctl 的非缓冲日志输出
答案2
也可能是你/某人/ntp 将时间改回了。事实证明 journalctl -f 根据日期显示最新日志,而不是根据最新传入日志...
答案3
您可能没有 inotify 资源。奇怪的是我的远程 VSCode 占用了太多资源。您可以通过执行以下操作来增加这些资源: https://stackoverflow.com/a/56292289/1394731
显然,当发生这种情况时,较新版本的 systemd 会发出警告:https://github.com/systemd/systemd/issues/2321#issuecomment-1032425855