Storage = autoの場合、systemd-journaldが "/var/log/journal/machine_id"ディレクトリを作成する理由

Storage = autoの場合、systemd-journaldが

私は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.pathstrjoin("/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とは異なり)。

おすすめ記事