SystemdDoctor
служба не работает планировщик приоритет права

status=214/SETSCHEDULER в systemd

Код 214/SETSCHEDULER значит, что systemd не сумел применить политику планирования процессора. Политики реального времени (fifo, rr) требуют прав и попадают под отдельный предел, а приоритет для них считается по собственной шкале — перепутать её легко.

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

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

  1. Политика реального времени без нужных прав

    CPUSchedulingPolicy=fifo и rr требуют CAP_SYS_NICE и достаточного LimitRTPRIO=. Обычная служба от непривилегированного пользователя их не получит.

  2. Приоритет вне диапазона выбранной политики

    Для fifo и rr приоритет задаётся числами от 1 до 99, для other и batch он должен быть нулевым. Приоритет 50 при политике other — ошибка.

  3. Ядро без поддержки реального времени

    В части контейнеров и на урезанных ядрах политики реального времени недоступны, и вызов отказывает независимо от прав.

Диагностика

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

Показывает шаг SETSCHEDULER и причину: отказ в доступе или недопустимый аргумент.

journalctl -xeu myapp.service --no-pager -n 20

Все параметры планирования вместе.

systemctl show myapp.service | grep -E "CPUScheduling|LimitRTPRIO|Nice"

Решение

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

1. Политика реального времени без нужных прав
Почему происходит
CPUSchedulingPolicy=fifo и rr требуют CAP_SYS_NICE и достаточного LimitRTPRIO=. Обычная служба от непривилегированного пользователя их не получит.
Как проверить
Посмотрите политику, приоритет и пределы.
systemctl show myapp.service -p CPUSchedulingPolicy -p CPUSchedulingPriority -p LimitRTPRIO -p CapabilityBoundingSet
Как исправить
Если реальное время действительно нужно, оставьте CAP_SYS_NICE и задайте LimitRTPRIO=. Если нет — уберите политику: по умолчанию other подходит почти всем службам.
2. Приоритет вне диапазона выбранной политики
Почему происходит
Для fifo и rr приоритет задаётся числами от 1 до 99, для other и batch он должен быть нулевым. Приоритет 50 при политике other — ошибка.
Как проверить
Сверьте политику и приоритет.
systemctl show myapp.service -p CPUSchedulingPolicy -p CPUSchedulingPriority
Как исправить
Согласуйте значения: либо fifo с приоритетом 1–99, либо other без приоритета.
3. Ядро без поддержки реального времени
Почему происходит
В части контейнеров и на урезанных ядрах политики реального времени недоступны, и вызов отказывает независимо от прав.
Как проверить
Проверьте окружение и доступность политики.
systemd-detect-virt
chrt -m
Как исправить
Откажитесь от политики реального времени в таком окружении.

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

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

× audio.service - Low latency audio
     Active: failed (Result: exit-code) since Mon 2026-09-14 20:03:19 MSK; 1s ago
    Process: 17880 ExecStart=/usr/local/bin/audiod (code=exited, status=214/SETSCHEDULER)

systemd[17880]: audio.service: Failed at step SETSCHEDULER spawning /usr/local/bin/audiod: Operation not permitted

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

  • status=201/NICE в systemd Код 201/NICE: systemd не смог выставить приоритет процесса из Nice=. Обычно мешает предел LimitNICE или отсутствие прав.
  • status=211/IOPRIO в systemd Код 211/IOPRIO: не удалось задать приоритет ввода-вывода из IOSchedulingClass= или IOSchedulingPriority=.
  • status=205/LIMITS в systemd Код 205/LIMITS: systemd не смог применить ограничения ресурсов из Limit*=. Обычно значение недопустимо или превышает жёсткий предел.
  • status=215/CPUAFFINITY в systemd Код 215/CPUAFFINITY: не удалось привязать процесс к перечисленным ядрам из CPUAffinity=. Обычно указаны несуществующие ядра.
  • AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
  • Caddy не занимает порты 80 и 443 без прав Служба падает при открытии слушателя: нет возможности занимать привилегированные порты.
  • Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
  • Interactive authentication required при управлении службой systemctl требует аутентификации: обращение от непривилегированного пользователя через polkit. Как разрешить точечно.

Источники

  • systemd.exec(5)
    214 EXIT_SETSCHEDULER: не удалось настроить планирование процессора.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено с CPUSchedulingPolicy=fifo и CPUSchedulingPriority=80 без CAP_SYS_NICE.
    собственная проверка, systemd 255
    сверено 15 сентября 2026