status=239/CACHE_DIRECTORY в systemd
Код 239/CACHE_DIRECTORY относится к каталогу в /var/cache. Его содержимое считается расходным: служба должна пережить его удаление без потерь. Отказ на этом шаге почти всегда означает переполненный раздел или остатки кеша от другого пользователя.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Раздел с кешем заполнен
Кеш растёт молча и без ограничений, если сама служба его не чистит. Когда /var/cache вынесен отдельным разделом, он заполняется первым.
-
Остатки кеша принадлежат прежнему пользователю
После смены
User=или перехода наDynamicUser=yesвладелец старого кеша не совпадает с новым пользователем службы. -
Кеш указан вместе с жёсткой изоляцией путей
При
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Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Кеш растёт молча и без ограничений, если сама служба его не чистит. Когда /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
- Почему происходит
- После смены
User=или перехода наDynamicUser=yesвладелец старого кеша не совпадает с новым пользователем службы.
- Как проверить
-
Посмотрите владельца каталога.
ls -ld /var/cache/myapp systemctl show myapp.service -p User -p DynamicUser
- Как исправить
- Проще всего удалить каталог кеша целиком: systemd создаст его заново с правильным владельцем, а данные внутри не нужны.
- Почему происходит
- При
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
Связанные ошибки
- status=238/STATE_DIRECTORY в systemd Код 238/STATE_DIRECTORY: не удалось подготовить постоянный каталог службы в /var/lib из StateDirectory=.
- No space left on device в журнале службы Нет места на устройстве: разбор по свободным блокам, по inode, по журналу systemd и по удалённым, но открытым файлам.
- status=240/LOGS_DIRECTORY в systemd Код 240/LOGS_DIRECTORY: не удалось подготовить каталог журналов службы в /var/log из LogsDirectory=.
- Disk quota exceeded для службы Место на разделе есть, а запись отклоняется: исчерпана дисковая квота пользователя или группы.
- Docker: no space left on device при запуске контейнеров Раздел с /var/lib/docker заполнен образами и слоями. Как посчитать занятое и что можно удалить безопасно.
- Elasticsearch: индексы переведены в режим только для чтения Elasticsearch блокирует запись при нехватке места: пороги watermark. Как снять блокировку правильно.
- Input/output error в журнале службы Ошибка ввода-вывода: проблемы носителя, отвалившийся сетевой ресурс, повреждённая файловая система. Что проверять срочно.
- MySQL: InnoDB не запускается после аварийного завершения Ошибки InnoDB при старте: повреждение страниц, несовпадение журнала, режим принудительного восстановления.
Источники
-
systemd.exec(5)
239 EXIT_CACHE_DIRECTORY: не удалось подготовить каталог, см. CacheDirectory=. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено на заполненном разделе и на кеше от прежнего пользователя.