如果您的 Linux 发行版没有安装日志记录守护程序,或者禁用了日志记录守护程序,那么该logger
命令生成的日志会发生什么情况?
我有带有 rsyslog 服务的 Ubuntu 20.04.2。当我关闭此服务时,我仍然可以使用该logger
命令,系统日志中不会写入任何内容,但该命令仍然接受我的输入并且退出代码为零。
当没有日志服务时,生成的日志会发生什么logger
?
该命令如何在logger
没有地方发送日志的情况下工作?如果没有任何东西可以接收日志,为什么会logger
成功退出?
'logger' 将数据发送到 Unix 套接字
/dev/log
。(尽管位于 /dev 中,但它是一个套接字。)在大多数 Linux 发行版上,这个套接字不再属于传统的 syslog 守护进程——它的另一端实际上并不直接进入 rsyslog。相反,/dev/log 套接字归systemd-journald服务所有,该服务仍在运行并接收消息。
(请注意,init 也持有套接字——如果 journald 停止,但套接字上有一些活动,init 将自动再次启动服务……就像过去为 TCP 服务所做的'inetd'。)
Systemd-journald 将日志存储在 /var/log/journal 中,您可以使用它
journalctl -f
而不是通常的 'tail -f' 来读取它(它们是索引二进制格式)。通常,即使 rsyslogd 关闭,通过 /dev/log 的消息也会继续写入那里。在这样的系统中,rsyslogd 和 syslog-ng 包只接收来自 systemd-journald 的中继消息,而不是直接来自程序。它们要么通过监听不同的套接字(在 /run/systemd 内)工作,journald 将所有消息转发到该套接字,要么直接从 /var/log/journal 读取二进制日志文件。
(通常直接访问 .journal 文件是首选,因为它允许 rsyslogd 收集程序包含的其他字段,否则在使用基于套接字的消息转发时会丢失这些字段。)
如果您将“记录器”指向不接受消息的 Unix 套接字,它实际上会显示一条错误消息,如下所示: