SystemdDoctor
служба не работает каталоги run права

status=233/RUNTIME_DIRECTORY в systemd

Код 233/RUNTIME_DIRECTORY значит, что systemd не сумел создать или настроить каталог в /run, объявленный параметром RuntimeDirectory=. Это каталог на время работы службы: там живут сокеты и pid-файлы, а при остановке systemd его удаляет.

Что это значит

Каталог создаётся заново при каждом запуске, владельцем становится пользователь службы, а права берутся из RuntimeDirectoryMode= (по умолчанию 0755). Раз каталог удаляется при остановке, хранить в нём что-то нужное между перезапусками нельзя — для этого есть StateDirectory=.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. В значении указан путь, а не имя

    Параметр принимает имя относительно /run, а не полный путь. Запись RuntimeDirectory=/run/myapp неверна: systemd попытается создать /run/run/myapp и упрётся в недопустимый путь.

  2. Каталог уже существует и принадлежит другому пользователю

    Если каталог в /run остался от прежнего запуска под другим пользователем (например службу перевели с root на app), systemd попытается исправить владельца и может не суметь этого при работающих внутри процессах.

  3. /run переполнен

    /run — это tmpfs в оперативной памяти, и её размер ограничен. Служба, которая пишет туда много данных, заполняет раздел, после чего каталоги перестают создаваться у всех.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

systemd называет полный путь каталога и причину отказа.

journalctl -xeu myapp.service --no-pager -n 20

Все настройки каталога и пользователь службы: обычно причина видна прямо здесь.

systemctl show myapp.service -p RuntimeDirectory -p RuntimeDirectoryMode -p RuntimeDirectoryPreserve -p User

Текущее состояние каталога: существует ли, чей, с какими правами.

ls -ld /run/myapp

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. В значении указан путь, а не имя
Почему происходит
Параметр принимает имя относительно /run, а не полный путь. Запись RuntimeDirectory=/run/myapp неверна: systemd попытается создать /run/run/myapp и упрётся в недопустимый путь.
Как проверить
Посмотрите действующее значение параметра.
systemctl show myapp.service -p RuntimeDirectory
Как исправить
Укажите только имя: RuntimeDirectory=myapp. Полный путь службе сообщается в переменной RUNTIME_DIRECTORY.
RuntimeDirectory=myapp
RuntimeDirectoryMode=0750
2. Каталог уже существует и принадлежит другому пользователю
Почему происходит
Если каталог в /run остался от прежнего запуска под другим пользователем (например службу перевели с root на app), systemd попытается исправить владельца и может не суметь этого при работающих внутри процессах.
Как проверить
Посмотрите владельца каталога и кто держит файлы внутри.
ls -ld /run/myapp
sudo fuser -v /run/myapp 2>&1 | head
Как исправить
Остановите службу, уберите каталог и запустите снова: при старте systemd создаст его заново с нужным владельцем.
sudo systemctl stop myapp.service && sudo rm -rf /run/myapp && sudo systemctl start myapp.service
3. /run переполнен
Почему происходит
/run — это tmpfs в оперативной памяти, и её размер ограничен. Служба, которая пишет туда много данных, заполняет раздел, после чего каталоги перестают создаваться у всех.
Как проверить
Посмотрите занятость /run и крупнейшие каталоги.
df -h /run
sudo du -sh /run/* 2>/dev/null | sort -h | tail -5
Как исправить
Уберите лишнее из /run и перенесите объёмные данные в /var/lib через StateDirectory=. Размер tmpfs при необходимости меняется параметром монтирования.

Пример вывода

В параметре указан полный путь вместо имени. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

× myapp.service - My application
     Active: failed (Result: exit-code) since Mon 2026-09-15 08:12:41 MSK; 1s ago
    Process: 3100 ExecStart=/usr/local/bin/myapp (code=exited, status=233/RUNTIME_DIRECTORY)

systemd[1]: myapp.service: Failed to set up special execution directory in /run: Invalid argument
systemd[1]: myapp.service: Main process exited, code=exited, status=233/RUNTIME_DIRECTORY

Связанные ошибки

Где встречается чаще всего

Источники

  • systemd.exec(5)
    233 EXIT_RUNTIME_DIRECTORY: не удалось подготовить каталог, см. RuntimeDirectory=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено с RuntimeDirectory=/run/myapp и на заполненной tmpfs /run.
    собственная проверка, systemd 255
    сверено 15 сентября 2026