Invalid argument в журнале службы
Сообщение Invalid argument (номер 22, EINVAL) — самое неинформативное из частых. Оно означает, что ядро сочло аргумент вызова недопустимым, но не говорит какой. Сужать поиск приходится по контексту: какая операция шла в этот момент.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Недопустимое значение в настройках службы
Размер буфера, флаг, адрес или параметр сокета вне допустимого диапазона. Программа передаёт значение как есть, ядро отвергает.
-
Параметр unit-файла не поддерживается ядром
Часть параметров изоляции и ресурсов требует поддержки ядра. При её отсутствии применение даёт эту ошибку.
-
Несовместимость флагов системного вызова
Это дефект программы: комбинация флагов недопустима. На разных ядрах проявляется по-разному.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Контекст вокруг ошибки: какая операция шла.
journalctl -u myapp.service -n 40 --no-pager | grep -B3 -i "invalid argument"Параметры, требующие поддержки ядра.
systemctl show myapp.service | grep -E "^Restrict|^Protect"Версия ядра.
uname -rРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Размер буфера, флаг, адрес или параметр сокета вне допустимого диапазона. Программа передаёт значение как есть, ядро отвергает.
- Как проверить
-
Посмотрите, при какой операции возникает ошибка.
journalctl -u myapp.service -n 30 --no-pager | grep -i -B2 "invalid argument"
- Как исправить
- Проверьте значения в настройках, названные рядом в журнале. Часто это размер буфера или параметр сети.
- Почему происходит
- Часть параметров изоляции и ресурсов требует поддержки ядра. При её отсутствии применение даёт эту ошибку.
- Как проверить
-
Посмотрите параметры и версию ядра.
systemctl show myapp.service | grep -E "^Restrict|^Protect|^Memory" uname -r
- Как исправить
- Уберите параметр, не поддерживаемый вашим ядром: список поддержки зависит от версии и сборки.
- Почему происходит
- Это дефект программы: комбинация флагов недопустима. На разных ядрах проявляется по-разному.
- Как проверить
-
Посмотрите версию программы и журнал.
journalctl -u myapp.service -n 30 --no-pager | tail -10
- Как исправить
- Обновите программу. Если ошибка появилась после обновления ядра, стоит сообщить разработчикам.
Пример вывода
Параметр изоляции не поддержан ядром. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
systemd[4100]: myapp.service: Failed to set up mount namespacing: Invalid argument
systemd[4100]: myapp.service: Failed at step NAMESPACE spawning /usr/local/bin/myapp: Invalid argument
Связанные ошибки
- status=226/NAMESPACE в systemd Код 226/NAMESPACE: не удалось настроить пространства имён монтирования, UTS или IPC. Частая причина — путь в ReadOnlyPaths= или ProtectHome=.
- Параметр не работает: он появился в более новой версии systemd Настройка из документации не действует, потому что версия systemd на сервере старше. Как проверить версию и найти замену.
- status=205/LIMITS в systemd Код 205/LIMITS: systemd не смог применить ограничения ресурсов из Limit*=. Обычно значение недопустимо или превышает жёсткий предел.
- Tainted в сообщениях ядра: что это значит при разборе сбоя Метка Tainted рядом с сообщением ядра: откуда берётся, на что влияет и почему её стоит учитывать.
- Elasticsearch: max virtual memory areas vm.max_map_count is too low Elasticsearch отказывается стартовать из-за заниженного vm.max_map_count. Как поднять значение и закрепить его.
- Failed to start … — что делать с общим сообщением Строка Failed to start сообщает только факт. Порядок разбора: найти настоящую причину выше по журналу.
- Function not implemented в контейнере Ошибка 38 при системном вызове: вызов запрещён фильтром или отсутствует в окружении. Разбор для контейнеров.
- Hardware Error / EDAC: ошибки памяти в журнале Ядро сообщает об ошибках памяти. Что считать безобидным, а что поводом менять модуль.
Источники
- errno(3): список кодов ошибок
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено параметром изоляции на ядре без нужной поддержки.