SystemdDoctor
мешает работе seccomp контейнеры ядро

Function not implemented в контейнере

Сообщение Function not implemented (номер 38, ENOSYS) означает, что системный вызов недоступен. У служб это почти всегда следствие фильтрации: seccomp в контейнере или SystemCallFilter= с возвратом ошибки вместо завершения.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Вызов запрещён фильтром с возвратом ошибки

    При SystemCallErrorNumber=ENOSYS запрещённый вызов не убивает процесс, а возвращает эту ошибку. Программа сообщает о ней своими словами.

  2. Профиль контейнера запрещает вызов

    Среды исполнения контейнеров применяют свой фильтр. Часть вызовов там недоступна, и программы из новых версий языков иногда упираются в это.

  3. Ядро старее, чем требует программа

    Новые вызовы появляются в новых версиях ядра. Программа, собранная под свежее ядро, на старом получает эту ошибку.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Фильтр вызовов службы.

systemctl show myapp.service -p SystemCallFilter -p SystemCallErrorNumber

Работает ли служба в контейнере.

systemd-detect-virt --container

Версия ядра.

uname -r

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Вызов запрещён фильтром с возвратом ошибки
Почему происходит
При SystemCallErrorNumber=ENOSYS запрещённый вызов не убивает процесс, а возвращает эту ошибку. Программа сообщает о ней своими словами.
Как проверить
Посмотрите фильтр службы.
systemctl show myapp.service -p SystemCallFilter -p SystemCallErrorNumber
Как исправить
Добавьте нужные вызовы в фильтр. Набор @system-service покрывает обычные потребности, но не всё.
2. Профиль контейнера запрещает вызов
Почему происходит
Среды исполнения контейнеров применяют свой фильтр. Часть вызовов там недоступна, и программы из новых версий языков иногда упираются в это.
Как проверить
Определите окружение и посмотрите профиль.
systemd-detect-virt --container
journalctl -u myapp.service -n 20 --no-pager | grep -i "not implemented"
Как исправить
Обновите среду исполнения контейнеров: профили расширяются вслед за новыми вызовами ядра. Отключать фильтр целиком — последняя мера.
3. Ядро старее, чем требует программа
Почему происходит
Новые вызовы появляются в новых версиях ядра. Программа, собранная под свежее ядро, на старом получает эту ошибку.
Как проверить
Посмотрите версию ядра и требования программы.
uname -r
journalctl -u myapp.service -n 20 --no-pager | tail -5
Как исправить
Обновите ядро или используйте сборку программы под вашу версию.

Пример вывода

Вызов запрещён фильтром с возвратом ошибки. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

myapp[1200]: error: clone3 failed: function not implemented
myapp[1200]: falling back to clone()

Связанные ошибки

Где встречается чаще всего

Источники

  • systemd.exec(5)
    SystemCallFilter= и SystemCallErrorNumber=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено фильтром с возвратом ошибки вместо завершения.
    собственная проверка, systemd 255
    сверено 15 сентября 2026