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

status=239/CACHE_DIRECTORY в systemd

Код 239/CACHE_DIRECTORY относится к каталогу в /var/cache. Его содержимое считается расходным: служба должна пережить его удаление без потерь. Отказ на этом шаге почти всегда означает переполненный раздел или остатки кеша от другого пользователя.

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

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

  1. Раздел с кешем заполнен

    Кеш растёт молча и без ограничений, если сама служба его не чистит. Когда /var/cache вынесен отдельным разделом, он заполняется первым.

  2. Остатки кеша принадлежат прежнему пользователю

    После смены User= или перехода на DynamicUser=yes владелец старого кеша не совпадает с новым пользователем службы.

  3. Кеш указан вместе с жёсткой изоляцией путей

    При ProtectSystem=strict каталог кеша всё равно подключается для записи, но если тот же путь попал в ReadOnlyPaths=, настройки противоречат друг другу.

Диагностика

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

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

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

Свободное место: самая частая причина именно этого кода.

df -h /var/cache

Действующие настройки каталога кеша.

systemctl show myapp.service -p CacheDirectory -p CacheDirectoryMode -p User

Решение

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

1. Раздел с кешем заполнен
Почему происходит
Кеш растёт молча и без ограничений, если сама служба его не чистит. Когда /var/cache вынесен отдельным разделом, он заполняется первым.
Как проверить
Посмотрите занятость и крупнейшие каталоги кеша.
df -h /var/cache
sudo du -sh /var/cache/* 2>/dev/null | sort -h | tail -6
Как исправить
Очистите кеш — по определению его можно удалять — и настройте ограничение размера в самой службе или периодическую очистку таймером.
sudo rm -rf /var/cache/myapp/* && sudo systemctl start myapp.service
2. Остатки кеша принадлежат прежнему пользователю
Почему происходит
После смены User= или перехода на DynamicUser=yes владелец старого кеша не совпадает с новым пользователем службы.
Как проверить
Посмотрите владельца каталога.
ls -ld /var/cache/myapp
systemctl show myapp.service -p User -p DynamicUser
Как исправить
Проще всего удалить каталог кеша целиком: systemd создаст его заново с правильным владельцем, а данные внутри не нужны.
3. Кеш указан вместе с жёсткой изоляцией путей
Почему происходит
При ProtectSystem=strict каталог кеша всё равно подключается для записи, но если тот же путь попал в ReadOnlyPaths=, настройки противоречат друг другу.
Как проверить
Посмотрите параметры изоляции и списки путей.
systemctl show myapp.service | grep -E "CacheDirectory|ReadOnlyPaths|ProtectSystem"
Как исправить
Уберите путь кеша из списка только для чтения: CacheDirectory= сам обеспечивает нужный доступ.

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

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

× myapp.service - My application
     Active: failed (Result: exit-code) since Mon 2026-09-15 08:52:40 MSK; 1s ago
    Process: 3900 ExecStart=/usr/local/bin/myapp (code=exited, status=239/CACHE_DIRECTORY)

systemd[1]: myapp.service: Failed to set up special execution directory in /var/cache: No space left on device

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

Источники

  • systemd.exec(5)
    239 EXIT_CACHE_DIRECTORY: не удалось подготовить каталог, см. CacheDirectory=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на заполненном разделе и на кеше от прежнего пользователя.
    собственная проверка, systemd 255
    сверено 15 сентября 2026