Too many levels of symbolic links
Сообщение о слишком большом числе уровней ссылок (номер 40, ELOOP) означает либо цикл — ссылка указывает на себя через цепочку, — либо цепочку глубже допустимой. Ядро прекращает переход, чтобы не зациклиться.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Ссылка образует цикл
Две ссылки указывают друг на друга, или ссылка ведёт на свой же каталог. Разрешить такой путь невозможно.
-
Слишком глубокая цепочка ссылок
Схема выкладки со ссылками на ссылки может превысить предел ядра, обычно равный сорока.
-
Ссылка создана относительным путём из другого каталога
Относительная ссылка разрешается от каталога, где она лежит. Перенос ссылки ломает путь и иногда даёт цикл.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Конечная цель цепочки ссылок или сообщение о цикле.
readlink -f /путь 2>&1Каждый уровень пути, включая ссылки.
namei -l /путь | headРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Две ссылки указывают друг на друга, или ссылка ведёт на свой же каталог. Разрешить такой путь невозможно.
- Как проверить
-
Посмотрите цепочку ссылок.
ls -l /etc/myapp/current readlink -f /etc/myapp/current 2>&1 | head
- Как исправить
- Исправьте ссылки так, чтобы цепочка заканчивалась настоящим файлом или каталогом.
- Почему происходит
- Схема выкладки со ссылками на ссылки может превысить предел ядра, обычно равный сорока.
- Как проверить
-
Посмотрите цепочку.
namei -l /etc/myapp/current/config.yml | head
- Как исправить
- Сократите цепочку: ссылка должна указывать сразу на цель, а не на другую ссылку.
- Почему происходит
- Относительная ссылка разрешается от каталога, где она лежит. Перенос ссылки ломает путь и иногда даёт цикл.
- Как проверить
-
Посмотрите значение ссылки и её расположение.
ls -l /etc/myapp/current
- Как исправить
- Используйте абсолютные пути в ссылках, которые могут переноситься.
Пример вывода
Ссылки образуют цикл. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
myapp[4200]: error: read config: too many levels of symbolic links
$ ls -l /etc/myapp/current
lrwxrwxrwx 1 root root 7 Sep 15 16:02 /etc/myapp/current -> current
Связанные ошибки
- No such file or directory в журнале службы Служба не находит файл или каталог. Разбор: путь, момент запуска, изоляция unit-файла, символические ссылки, приватный /tmp.
- Not a directory в журнале службы Ошибка 20: часть пути оказалась файлом, а не каталогом. Разбор для путей в unit-файле и в настройках.
- Argument list too long в службе или скрипте Список аргументов слишком длинный: подстановка имён файлов дала тысячи аргументов. Как переписать вызов.
- Bad file descriptor в журнале службы Ошибка 9 при операции с файлом: дескриптор закрыт или не тот. Разбор для служб и сокет-активации.
- Could not open file и cannot open shared object file Программа не может открыть файл или библиотеку: путь, права, отсутствующая зависимость сборки, изоляция.
- Device or resource busy при операции с файлом Ошибка 16: файл или устройство заняты. Разбор для точек монтирования, устройств и файлов конфигурации.
- File exists при создании файла или сокета Ошибка 17: объект уже существует. Разбор для сокетов, файлов блокировки и каталогов службы.
- Text file busy при обновлении программы Ошибка 26 при записи в исполняемый файл: он выполняется прямо сейчас. Как правильно обновлять программы служб.
Источники
- path_resolution(7): пределы разрешения путей
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено ссылкой, указывающей на саму себя.