Параметр не работает: он появился в более новой версии systemd
Документация systemd описывает последнюю версию, а на сервере может стоять версия трёхлетней давности. Незнакомый параметр она просто отбросит с предупреждением в журнале — настройка молча не сработает.
Что это значит
В документации у каждого параметра указано, с какой версии он доступен. Сравнивать нужно с выводом systemctl --version на конкретной машине, а не с версией дистрибутива.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Параметр появился позже вашей версии
systemd активно развивается: за каждый выпуск добавляется несколько параметров. На системах с длительной поддержкой разрыв достигает нескольких лет.
-
Значение параметра новее, чем сам параметр
Бывает, что параметр есть, а конкретное значение добавили позже: например тип
notify-reloadили значениеstrictу отдельных защит. -
Unit-файл перенесён с более новой системы
Файл, написанный для свежего дистрибутива, на старом сервере теряет часть настроек — и незаметно.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Версия systemd на этой машине — точка отсчёта для всей документации.
systemctl --version | head -1Незнакомые параметры и значения.
systemd-analyze verify /etc/systemd/system/myapp.serviceЧто systemd отбросил при чтении unit-файлов.
journalctl -b --no-pager | grep -iE "Unknown key|unknown lvalue" | headРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- systemd активно развивается: за каждый выпуск добавляется несколько параметров. На системах с длительной поддержкой разрыв достигает нескольких лет.
- Как проверить
-
Посмотрите версию и найдите незнакомые параметры в журнале.
systemctl --version | head -1 journalctl -b --no-pager | grep -iE "Unknown key|unknown lvalue" | head
- Как исправить
- Найдите замену для своей версии или обновите систему. Часть новых параметров имеет более старые аналоги.
- Почему происходит
- Бывает, что параметр есть, а конкретное значение добавили позже: например тип
notify-reloadили значениеstrictу отдельных защит.
- Как проверить
-
Посмотрите предупреждения о значении.
systemd-analyze verify /etc/systemd/system/myapp.service 2>&1 | head
- Как исправить
- Используйте значение, доступное в вашей версии.
- Почему происходит
- Файл, написанный для свежего дистрибутива, на старом сервере теряет часть настроек — и незаметно.
- Как проверить
-
Проверьте файл статической проверкой на этой машине.
systemd-analyze verify /etc/systemd/system/myapp.service
- Как исправить
- Держите unit-файлы согласованными с версией systemd на целевых машинах или проверяйте их при переносе.
Пример вывода
Параметр из свежей документации на системе с systemd 245. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
systemd[1]: /etc/systemd/system/myapp.service:12: Unknown key name 'RestartSteps' in section 'Service', ignoring.
systemd[1]: /etc/systemd/system/myapp.service:13: Unknown key name 'MemoryKSM' in section 'Service', ignoring.
Связанные ошибки
- Unit file is bad и ошибки разбора unit-файла systemd не может разобрать unit-файл: неизвестные параметры, ошибки в секциях, недопустимые значения. Как найти проблемную строку.
- status=243/CREDENTIALS в systemd Код 243/CREDENTIALS: не удалось подготовить учётные данные службы из LoadCredential=, SetCredential= или ImportCredential=.
- status=245/KSM в systemd Код 245/KSM: не удалось включить объединение одинаковых страниц памяти через MemoryKSM=. Код появился в systemd 254.
- Apache: Invalid command — не включён модуль Apache не запускается: директива требует модуль, который не подключён. Как найти нужный модуль и включить.
- Apache: правила .htaccess не действуют Файл .htaccess игнорируется: запрещён параметром AllowOverride, нет нужного модуля, файл не читается.
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
- Docker: unable to configure the Docker daemon with file daemon.json Демон Docker не запускается из-за ошибки в /etc/docker/daemon.json: неверный JSON или неизвестный ключ.
- Docker: unable to configure the Docker daemon — конфликт -H и hosts Адрес прослушивания задан дважды: ключом -H в unit-файле и параметром hosts в daemon.json. Демон отказывается стартовать.
Источники
-
systemd.directives(7)
Указатель параметров с версиями появления. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено переносом unit-файла с systemd 255 на систему с systemd 245.