私はsystemd-journaldのコードを調べて、次のことを見つけました(でsystem_journal_open()
):
if (!s->system_journal &&
IN_SET(s->storage, STORAGE_PERSISTENT, STORAGE_AUTO) &&
(flush_requested || flushed_flag_is_set())) {
/* If in auto mode: first try to create the machine
* path, but not the prefix.
*
* If in persistent mode: create /var/log/journal and
* the machine path */
if (s->storage == STORAGE_PERSISTENT)
(void) mkdir_p("/var/log/journal/", 0755);
(void) mkdir(s->system_storage.path, 0755);
fn = strjoina(s->system_storage.path, "/system.journal");
ここでは、以前の関数呼び出しでに設定されましたsystem_storage.path
。strjoin("/var/log/journal/", SERVER_MACHINE_ID(s));
私が理解した/var/log/journal
のはリポジトリですpersistent
。しかし、どちらの場合(persistent
またはauto
)も/var/log/journal/machine_id
ディレクトリ((void) mkdir(s->system_storage.path, 0755);
)を作成するのはなぜですか?
auto
事前に生成された場合はログが保持され/var/log/journal
、それ以外の場合はログが記録されます/run/log/journal
。ディレクトリをauto
作成しないでください。/var/log/journal/machine_id
また、コメントを読んだ後に/var/log/journal/machine_id
プレフィックスを作成せずにどのように作成できますか?私は/var/log/journal
それがプレフィックスだと仮定しています。
答え1
私はそれを見つけた。これは単なる混乱なので、persistent
コードに設定すると/var/log/journal
プレフィックスが生成され、machine_id
ディレクトリが生成され、設定すると(プレフィックス)auto
が/var/log/journal
生成されないため、次のようにフルパスを生成しようとすると(void) mkdir(s->system_storage.path, 0755);
失敗します。journal
ディレクトリが欠落していて(ほとんどのシステムがすでに持っていると仮定して)、フルパス/var/log/
でmkdir
ディレクトリが欠落している場合、コマンドは失敗します(mkdir
欠落したディレクトリを生成する-pとは異なり)。