使用sudo journalctl -u {service}
我可以看到特定服务的日志。
- 如何找到关联的日志文件?
- 以编程方式监视日志文件的最佳方法是什么? (我的意思是一个基于日志文件中出现的内容进行反应的程序)
答案1
具有 s6、runit、perp、nosh、daemontools-encore 等的系统。这样做服务管理工作。每个主要服务都有一组可以单独监控的单独关联的日志文件,以及分散的日志记录机制。
然而 systemd 并不是这样工作的。任何给定服务都没有单独的“关联日志文件”。没有要监视的此类文件。
所有日志输出都集中到单个中央守护进程 中,systemd-journald
并且该守护进程将其写入单个流,所有服务的日志输出都合并到单个中央日志中/{run,var}/log/journal/
。
选项-u
是journalctl
后处理过滤器,用于过滤从单个中央日志打印的内容,所有日志条目都标记有(除其他外)相关服务的名称。所有东西都呈扇形散开,然后必须经过过滤才能将其分离回(大约)原来的样子。
systemd 的方式是添加journalctl -f
适当的过滤器,或者直接使用 systemd 特定的 API 为其日志编写自己的程序。
进一步阅读
答案2
1.) 如果你的Linux发行版使用了journald
完整的范围,将不会有易于阅读的传统日志文件,如@JdeBP提及。日志文件使用二进制格式,传统日志文件工具不易解析。
2.) 如果journalctl -u {service}
有您需要的信息,那么您可以使用journalctl -f -u {service}
输出并将其通过管道传输到解析日志并触发任何所需反应的程序。除此之外的任何内容都可能特定于您选择的 Linux 发行版。
例如,Debian 9 (Stretch) 在默认配置中保留了journald
传统的/dev/log
syslog 输入套接字。但如果rsyslogd
已安装,journald
则配置为将传入的系统日志消息转发给它。
journald
其他 Linux 发行版可能与结构不同的传统 syslog 守护进程之间存在关系。