systemd-tmpfiles — 임시 파일과 디렉터리 자동 관리

tmpfiles.d 설정 파일 문법으로 런타임 디렉터리를 생성하고 오래된 파일을 자동으로 정리하는 방법, 그리고 패키지 기본값을 /etc에서 오버라이드하는 방법을 설명합니다.

· 4 min read · PALDYN Team

지난 글에서 systemd-resolved와 networkd로 DNS와 네트워크를 설정했습니다. 이번에는 systemd-tmpfiles를 다룹니다. /tmp 자동 정리, 런타임 디렉터리 생성, 권한 설정을 선언적으로 관리하는 systemd 컴포넌트입니다.

tmpfiles가 해결하는 문제

서비스가 시작될 때 /run/myapp/ 디렉터리가 필요하다고 가정하겠습니다. 이 디렉터리는 재부팅 시 사라지는 tmpfs에 있기 때문에 매번 다시 만들어야 합니다. 예전에는 init 스크립트나 ExecStartPre에서 직접 mkdir -p를 호출했습니다. systemd-tmpfiles는 이를 설정 파일로 선언하고, 부팅 시 자동으로 처리합니다.

설정 파일 위치와 우선순위

설정 파일은 세 경로에서 읽힙니다. 같은 이름의 파일이 여러 경로에 있으면 /etc가 가장 높은 우선순위를 가집니다.

/etc/tmpfiles.d/     ← 관리자 커스텀 (최우선)
/run/tmpfiles.d/     ← 런타임 생성
/usr/lib/tmpfiles.d/ ← 패키지 기본값

배포판 패키지가 /usr/lib/tmpfiles.d/nginx.conf를 제공하더라도, 같은 이름의 파일을 /etc/tmpfiles.d/nginx.conf에 만들면 완전히 대체됩니다.

tmpfiles 설정 파일 검색 순서

설정 파일 문법

각 줄은 타입 경로 모드 소유자 그룹 나이 인자 형식입니다.

# 타입  경로              모드  소유자  그룹   나이
d       /run/myapp        0755  root    root   -
D       /tmp/cache        1777  root    root   10d
f       /run/myapp/lock   0644  myapp   myapp  -
z       /var/log/myapp    0750  myapp   adm    -
r       /tmp/old-files    -     -       -      -

tmpfiles.d 설정 문법

주요 타입을 정리하면 다음과 같습니다.

타입동작
d디렉터리 생성, 이미 있으면 소유자·권한 수정
Dd와 같지만 나이 설정에 따라 오래된 하위 파일 삭제
f빈 파일 생성 (이미 있으면 건드리지 않음)
F파일 생성 또는 비우기
z소유자·권한·SELinux 레이블 설정
Zz를 재귀적으로 적용
r파일 삭제 (디렉터리 비재귀)
R디렉터리 재귀 삭제
L심볼릭 링크 생성

실전 예제: 서비스 런타임 디렉터리

# /etc/tmpfiles.d/myapp.conf
d /run/myapp         0750 myapp myapp -
d /run/myapp/sockets 0750 myapp myapp -
f /run/myapp/status  0640 myapp myapp -
z /var/log/myapp     0750 myapp adm   -

이 파일을 만들고 서비스 유닛에서 RuntimeDirectory=myapp을 쓰는 것과 비교하면, tmpfiles는 여러 경로를 한꺼번에 정의할 수 있고, 기존 파일의 권한 수정(z)도 함께 처리할 수 있다는 장점이 있습니다.

적용 방법

# 즉시 적용 (파일 생성)
sudo systemd-tmpfiles --create /etc/tmpfiles.d/myapp.conf

# 오래된 파일 정리
sudo systemd-tmpfiles --clean

# 전체 설정 재적용
sudo systemd-tmpfiles --create --clean --remove

부팅 시에는 systemd-tmpfiles-setup.service--create를, systemd-tmpfiles-clean.timer가 주기적으로 --clean을 실행합니다.

/tmp 자동 정리

기본 제공되는 /usr/lib/tmpfiles.d/tmp.conf/tmp를 10일마다 정리합니다. 이 주기를 바꾸려면 오버라이드 파일을 만듭니다.

# /tmp 정리 주기를 3일로 단축
sudo cp /usr/lib/tmpfiles.d/tmp.conf /etc/tmpfiles.d/tmp.conf
# 파일 열어서 나이 값(10d)을 3d로 수정

지난 글: systemd-resolved와 systemd-networkd — DNS와 네트워크 설정

다음 글: systemd-logind — 세션과 전원 관리


읽어주셔서 감사합니다. 😊