SystemdDoctor
ListenStream= [Socket]

ListenStream= и другие Listen…= в сокет-unit

Задаёт адрес, который systemd будет слушать для сокета потокового типа: номер порта, адрес с портом или путь к unix-сокету. Для других типов есть ListenDatagram=, ListenFIFO= и родственные параметры.

Что делает

Смысл сокет-активации в том, что порт открывает systemd, а не служба. Это даёт две вещи: службу можно запускать по первому обращению, и при перезапуске службы соединения не теряются — их держит systemd.

Формат значения зависит от вида адреса: одно число — порт на всех интерфейсах, адрес:порт — конкретный интерфейс, путь начиная с косой черты — unix-сокет.

Где ставится. В секции [Socket]. Можно указать несколько строк — сокет будет слушать все адреса.

Значения

ЗначениеЧто происходит
8080TCP-порт на всех интерфейсах.
127.0.0.1:8080только петлевой интерфейс.
[::1]:8080адрес IPv6 в квадратных скобках.
/run/myapp/app.sockunix-сокет; каталог создаётся через RuntimeDirectory=.

Пример

Сокет с unix-адресом и правами для веб-сервера.

[Socket]
ListenStream=/run/myapp/app.sock
SocketUser=app
SocketGroup=www-data
SocketMode=0660

[Install]
WantedBy=sockets.target

Права на сокет задаются здесь, а не в службе: файл создаёт systemd, и он же выставляет владельца.

Типичные ошибки

Сокет без единого Listen…= не загружается: systemd сообщает, что unit не настроен.

Порт, уже занятый самой службой, приводит к конфликту: выбирайте один способ — сокет-активацию или самостоятельную привязку.

Для unix-сокета нужен существующий каталог: используйте RuntimeDirectory=.

В автозапуск нужно ставить сокет, а не службу.

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

Рядом стоящие параметры

Где важен на практике

Источники

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