Linux

為什麼在 systemd-journald 中“log_set_prohibit_ipc”設置為 true?

  • August 31, 2021

我剛開始學習journald,在它的main()函式(in journald.c)中遇到了一個函式呼叫log_set_prohibit_ipc(true);

誰能告訴我為什麼預設設置為true?

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 組件記錄事情,避免重複或內部日誌。這也可能是單例設計模式的實現,可能是為了簡化多寫並發問題。

引用自:https://unix.stackexchange.com/questions/666247