私は学習を始め、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
これにはいくつかの推測がありますが、これはマスター管理者が重複や内部ロギングを回避しながら、他のシステムコンポーネントに代わってエントリを記録することを意味すると推測します。これは、マルチライターの並行性の問題を単純化するためのシングルトンデザインパターンの実装でもあります。