为什么 systemd-journald 中的“log_set_prohibit_ipc”设置为 true?

为什么 systemd-journald 中的“log_set_prohibit_ipc”设置为 true?

我刚刚开始学习journald,在它的main()函数(in journald.c)中我遇到了一个函数调用log_set_prohibit_ipc(true);

谁能告诉我为什么默认设置为true?

答案1

systemd源代码中,您可以看到以下声明src/basic/log.h

/* If turned on, then we'll never use IPC-based logging, 
 * i.e. never log to syslog or the journal. We'll only 
 * log to stderr, the console or kmsg */
void log_set_prohibit_ipc(bool b);

所以看起来这个函数会阻止journald写入日志。事实上,如果我们看看它的所有用途:

stew ~/src/systemd-246.1/src $ grep -rw log_set_prohibit_ipc 
shutdown/shutdown.c:        log_set_prohibit_ipc(true);
shared/generator.c:        log_set_prohibit_ipc(true);
journal/journald.c:        log_set_prohibit_ipc(true);
core/manager.c:        log_set_prohibit_ipc(!manager_journal_is_running(m));
core/main.c:                log_set_prohibit_ipc(true);
basic/log.h:void log_set_prohibit_ipc(bool b);
basic/log.c:void log_set_prohibit_ipc(bool b) {

我们看到它log_set_prohibit_ipc( ... )被设置为true除了core/manager.c(这是主要的 systemd 管理器)之外的任何地方。即使如此,只有当没有其他管理器正在运行时,该管理器才会记录日志。

这里有一些猜测,但我猜测这意味着主管理器将代表其他 systemd 组件记录内容,避免重复或内部日志。这也可能是单例设计模式的实现,可能是为了简化多写入器并发问题。

相关内容