SystemdDoctor
служба не работает сокеты конфигурация

Сокет без Listen: unit загружен, но ничего не слушает

Сокет-unit без параметра Listen…= не имеет смысла: слушать нечего. systemd сообщает, что unit не настроен, и запуск не проходит. Адрес задаётся одним из параметров: ListenStream= для TCP и unix-сокетов, ListenDatagram= для UDP, ListenFIFO= для каналов.

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

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

  1. Параметр прослушивания не задан вовсе

    Секция [Socket] есть, а адреса в ней нет. Такой unit systemd загружать откажется.

  2. Параметр записан с опечаткой

    Listen=, ListenTCP= или ListenPort= — не существующие имена. systemd отметит их как незнакомые и оставит сокет без адреса.

  3. Адрес задан в секции [Service] вместо [Socket]

    Параметры сокета живут только в своей секции. В [Service] они игнорируются.

Диагностика

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

Показывает все принятые адреса прослушивания. Пустое значение — причина найдена.

systemctl show myapp.socket -p Listen

Все активные сокеты systemd с адресами и связанными службами.

systemctl list-sockets --no-pager

Решение

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

1. Параметр прослушивания не задан вовсе
Почему происходит
Секция [Socket] есть, а адреса в ней нет. Такой unit systemd загружать откажется.
Как проверить
Посмотрите описание сокета.
systemctl cat myapp.socket
Как исправить
Добавьте адрес: номер порта, адрес с портом или путь к unix-сокету.
[Socket]
ListenStream=127.0.0.1:8080
2. Параметр записан с опечаткой
Почему происходит
Listen=, ListenTCP= или ListenPort= — не существующие имена. systemd отметит их как незнакомые и оставит сокет без адреса.
Как проверить
Посмотрите, какие адреса systemd принял.
systemctl show myapp.socket -p Listen
Как исправить
Используйте точные имена: ListenStream, ListenDatagram, ListenSequentialPacket, ListenFIFO.
3. Адрес задан в секции [Service] вместо [Socket]
Почему происходит
Параметры сокета живут только в своей секции. В [Service] они игнорируются.
Как проверить
Посмотрите, в какой секции стоит параметр.
systemctl cat myapp.socket | grep -n -B2 Listen
Как исправить
Перенесите параметр в [Socket] и перечитайте конфигурацию.

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

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

× myapp.socket - Socket for myapp
     Loaded: loaded (/etc/systemd/system/myapp.socket; enabled; preset: enabled)
     Active: failed (Result: resources)

systemd[1]: myapp.socket: Unit has no Listen setting (ListenStream=, ListenDatagram=, ListenFIFO=, ...). Refusing.
systemd[1]: myapp.socket: Failed to listen on sockets: Invalid argument

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

Источники

  • systemd.socket(5)
    Параметры Listen…= и требование хотя бы одного из них.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на .socket без ListenStream.
    собственная проверка, systemd 255
    сверено 15 сентября 2026