RuntimeDirectory=: каталог службы в /run
Создаёт каталог в /run на время работы службы. При остановке systemd его удаляет вместе с содержимым, если не указано иное.
Что делает
Каталог в /run — правильное место для сокетов и pid-файлов: это временная файловая система в памяти, она очищается при перезагрузке, и права там всегда предсказуемы. Создавать его вручную не нужно и вредно: после перезагрузки он исчезнет, а служба этого не ожидает.
Удаление при остановке иногда мешает: если в каталоге лежит что-то нужное между перезапусками, поставьте RuntimeDirectoryPreserve=restart.
Где ставится. В секции [Service]. Значение — имя каталога без пути.
Значения
| Значение | Что происходит |
|---|---|
RuntimeDirectory=myapp | создаст /run/myapp. |
RuntimeDirectoryMode=0750 | права на каталог. |
RuntimeDirectoryPreserve=restart | сохранять содержимое при перезапуске. |
RuntimeDirectoryPreserve=yes | не удалять до перезагрузки машины. |
Пример
Служба с unix-сокетом для веб-сервера.
[Service]
User=app
Group=www-data
RuntimeDirectory=myapp
RuntimeDirectoryMode=0750
ExecStart=/usr/local/bin/myapp --socket /run/myapp/app.sock
Группа выбрана так, чтобы веб-сервер мог писать в сокет. Права 0750 при этом остаются узкими.
Типичные ошибки
Каталог, созданный вручную, исчезает при перезагрузке: служба перестанет запускаться после ребута.
По умолчанию содержимое удаляется при остановке — pid-файлы и сокеты не переживают перезапуск.
Полный путь в значении недопустим: только имя.
Связанные ошибки
- status=233/RUNTIME_DIRECTORY в systemdКод 233/RUNTIME_DIRECTORY: не удалось подготовить каталог службы в /run из RuntimeDirectory=. Права, режим, удаление при остановке.
- nginx 502 Bad Gateway: connect() failed к приложениюnginx работает, а приложение недоступно: connect() failed, connection refused, no such file or directory для сокета. Разбор 502.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.exec(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)