Прокси не запускается: каталоги кеша не созданы
Прокси требует заранее размеченных каталогов кеша: их создаёт отдельная команда, а не сама служба при запуске. После установки, смены пути или увеличения размера кеша разметку нужно выполнить снова.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Каталоги кеша не размечены
Служба ожидает готовую структуру каталогов. Пустой каталог её не устраивает.
-
Каталог кеша принадлежит не пользователю службы
Служба переходит на своего пользователя и не может писать в каталог, созданный от root.
-
Размер кеша больше доступного места
Служба размечает кеш на заявленный размер. Если места меньше, разметка отказывает или кеш ломается при заполнении.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Сообщения службы при запуске.
journalctl -u squid -n 30 --no-pagerКаталог кеша, его владелец и место на разделе.
sudo ls -ld /var/spool/squid && df -h /var/spool/squidПроверка настроек прокси без запуска.
sudo squid -k parse 2>&1 | tail -10Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Служба ожидает готовую структуру каталогов. Пустой каталог её не устраивает.
- Как проверить
-
Посмотрите сообщение службы и содержимое каталога.
journalctl -u squid -n 20 --no-pager | grep -iE "cache_dir|swap" sudo ls /var/spool/squid 2>/dev/null | head
- Как исправить
-
Выполните разметку каталогов кеша штатной командой службы и запустите её заново. Разметка нужна и после увеличения размера кеша.
sudo squid -z && sudo systemctl start squid
- Почему происходит
- Служба переходит на своего пользователя и не может писать в каталог, созданный от root.
- Как проверить
-
Посмотрите владельца каталога и пользователя службы.
sudo ls -ld /var/spool/squid 2>/dev/null systemctl show squid -p User -p CacheDirectory 2>/dev/null
- Как исправить
-
Передайте каталог пользователю службы либо объявите его через
CacheDirectory=: systemd создаст его с верным владельцем.
- Почему происходит
- Служба размечает кеш на заявленный размер. Если места меньше, разметка отказывает или кеш ломается при заполнении.
- Как проверить
-
Сравните заявленный размер и свободное место.
grep -iE "^cache_dir" /etc/squid/squid.conf 2>/dev/null df -h /var/spool/squid 2>/dev/null
- Как исправить
- Приведите заявленный размер кеша в соответствие с разделом, оставив запас. Кеш, занимающий раздел целиком, приводит к отказам при заполнении.
Пример вывода
Каталоги кеша не размечены. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
squid[7600]: FATAL: Failed to verify one of the swap directories, Check cache.log
squid[7600]: for details. Run 'squid -z' to create swap directories
squid[7600]: if needed, or if running Squid for the first time.
systemd[1]: squid.service: Main process exited, code=exited, status=1/FAILURE
Связанные ошибки
- status=239/CACHE_DIRECTORY в systemd Код 239/CACHE_DIRECTORY: не удалось подготовить каталог кеша службы в /var/cache из CacheDirectory=.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- No space left on device в журнале службы Нет места на устройстве: разбор по свободным блокам, по inode, по журналу systemd и по удалённым, но открытым файлам.
- Обратный прокси не получает сертификаты: файл хранения недоступен Автоматический выпуск сертификатов не проходит: права на файл хранения слишком широкие или файл недоступен.
- AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
- Caddy не занимает порты 80 и 443 без прав Служба падает при открытии слушателя: нет возможности занимать привилегированные порты.
- Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
Источники
- Документация Squid
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено запуском службы с пустым каталогом кеша.