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

status=238/STATE_DIRECTORY в systemd

Код 238/STATE_DIRECTORY относится к постоянному каталогу службы в /var/lib. Там лежат данные, которые должны переживать перезапуск и перезагрузку, поэтому в отличие от каталога в /run systemd его не удаляет — и именно из-за этого чаще всего возникают проблемы с владельцем.

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

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

  1. Каталог создавали вручную под root, а служба работает от обычного пользователя

    Это самый частый случай: каталог появился при первой установке от root, потом в unit-файл добавили User=. systemd пытается сменить владельца, но если внутри есть файлы, принадлежащие другим пользователям, или каталог лежит на файловой системе без поддержки владельцев, шаг не проходит.

  2. Раздел /var переполнен

    На переполненном разделе создать каталог невозможно. Служба при этом может не запускаться месяцами исправной работы спустя — место кончилось постепенно.

  3. Имя каталога конфликтует с существующей символической ссылкой

    Если /var/lib/myapp — ссылка на другой каталог (частый приём при переносе данных на отдельный диск), systemd откажется считать её своим каталогом состояния при несовпадении владельца цели.

Диагностика

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

Показывает полный путь и причину отказа от ядра.

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

Настройки каталога и пользователь: при DynamicUser=yes владелец меняется от запуска к запуску, и это отдельная история.

systemctl show myapp.service -p StateDirectory -p StateDirectoryMode -p User -p DynamicUser

Место на разделе и состояние каталога за одну команду.

df -h /var && ls -ld /var/lib/myapp

Решение

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

1. Каталог создавали вручную под root, а служба работает от обычного пользователя
Почему происходит
Это самый частый случай: каталог появился при первой установке от root, потом в unit-файл добавили User=. systemd пытается сменить владельца, но если внутри есть файлы, принадлежащие другим пользователям, или каталог лежит на файловой системе без поддержки владельцев, шаг не проходит.
Как проверить
Посмотрите владельца каталога и вложенных файлов.
ls -la /var/lib/myapp | head
stat -c "%U:%G %n" /var/lib/myapp
Как исправить
Смените владельца рекурсивно на пользователя службы, затем перезапустите её.
sudo chown -R app:app /var/lib/myapp && sudo systemctl restart myapp.service
2. Раздел /var переполнен
Почему происходит
На переполненном разделе создать каталог невозможно. Служба при этом может не запускаться месяцами исправной работы спустя — место кончилось постепенно.
Как проверить
Посмотрите свободное место и крупнейших потребителей.
df -h /var
sudo du -sh /var/* 2>/dev/null | sort -h | tail -6
Как исправить
Освободите место: старые журналы, кеши пакетов, забытые резервные копии. Затем перезапустите службу.
3. Имя каталога конфликтует с существующей символической ссылкой
Почему происходит
Если /var/lib/myapp — ссылка на другой каталог (частый приём при переносе данных на отдельный диск), systemd откажется считать её своим каталогом состояния при несовпадении владельца цели.
Как проверить
Проверьте, не ссылка ли это, и куда она ведёт.
ls -ld /var/lib/myapp && readlink -f /var/lib/myapp
Как исправить
Либо приведите владельца цели в порядок, либо смонтируйте нужный диск прямо в /var/lib/myapp вместо ссылки и добавьте RequiresMountsFor=.

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

Каталог принадлежит root, в unit-файле User=app. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

× myapp.service - My application
     Active: failed (Result: exit-code) since Mon 2026-09-15 08:30:19 MSK; 1s ago
    Process: 3400 ExecStart=/usr/local/bin/myapp (code=exited, status=238/STATE_DIRECTORY)

systemd[1]: myapp.service: Failed to set up special execution directory in /var/lib: Operation not permitted
systemd[1]: myapp.service: Main process exited, code=exited, status=238/STATE_DIRECTORY

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

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

Источники

  • systemd.exec(5)
    238 EXIT_STATE_DIRECTORY: не удалось подготовить каталог, см. StateDirectory=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на каталоге root при User=app и на заполненном /var.
    собственная проверка, systemd 255
    сверено 15 сентября 2026