Storage=auto일 때 systemd-journald가 "/var/log/journal/machine_id" 디렉토리를 생성하는 이유

Storage=auto일 때 systemd-journald가 "/var/log/journal/machine_id" 디렉토리를 생성하는 이유

나는 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와 달리).

관련 정보