systemd-tmpfiles: создание каталогов и файлов по описанию
Механизм создания и очистки файлов и каталогов по декларативному описанию. Работает при загрузке и по таймеру, не требуя команд в unit-файлах служб.
Что делает
Это правильное место для каталогов, которые нужны службе, но не покрываются параметрами вида StateDirectory=: например каталог в /srv с особыми правами или файл в /run с нужным владельцем.
Второе применение — очистка. Описание может задавать срок жизни файлов, и тогда старые записи удаляются автоматически. Так системный /tmp очищается от давних файлов.
Где ставится. Файлы описаний в /etc/tmpfiles.d, /run/tmpfiles.d, /usr/lib/tmpfiles.d.
Значения
| Значение | Что происходит |
|---|---|
d /run/myapp 0750 app app - | создать каталог с владельцем и правами. |
f /var/log/myapp/app.log 0640 app adm - | создать файл, если его нет. |
D /var/cache/myapp 0750 app app 7d | создать и очищать содержимое старше недели. |
L /etc/myapp/current - - - - /etc/myapp/v2 | создать символическую ссылку. |
Пример
Каталог для службы с очисткой старых файлов.
# /etc/tmpfiles.d/myapp.conf
d /run/myapp 0750 app app -
D /var/cache/myapp 0750 app app 7d
# применить не дожидаясь загрузки:
# systemd-tmpfiles --create /etc/tmpfiles.d/myapp.conf
Типичные ошибки
Описание применяется при загрузке: после правки нужно применить его вручную или перезагрузиться.
Заглавная буква в типе записи означает очистку содержимого — легко удалить нужное, перепутав регистр.
Для каталогов, которые полностью принадлежат службе, проще использовать StateDirectory= и родственные параметры.
Связанные ошибки
- status=233/RUNTIME_DIRECTORY в systemdКод 233/RUNTIME_DIRECTORY: не удалось подготовить каталог службы в /run из RuntimeDirectory=. Права, режим, удаление при остановке.
- Permission denied в журнале службыОтказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- status=238/STATE_DIRECTORY в systemdКод 238/STATE_DIRECTORY: не удалось подготовить постоянный каталог службы в /var/lib из StateDirectory=.
Рядом стоящие параметры
Источники
- tmpfiles.d(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)