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

Сокет с каналом: права не позволяют писать

Именованный канал создаёт systemd, и права на него берутся из описания сокета. Клиенты, не входящие в группу-владельца, писать не смогут — и это самая частая причина молчания такой схемы.

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

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

  1. Права канала не позволяют запись клиентам

    По умолчанию канал создаётся с правами владельца. Другие процессы в него не пишут.

  2. Каталог канала не создаётся

    Как и для unix-сокетов, каталог в /run нужно объявить через параметр службы.

  3. Клиент открывает канал на запись раньше читателя

    Открытие канала на запись блокируется, пока нет читателя. При сокет-активации служба поднимается по обращению, но порядок всё равно важен.

Диагностика

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

Права и владелец канала.

sudo ls -l /run/myapp/

Описание сокета целиком.

systemctl cat myapp.socket

Решение

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

1. Права канала не позволяют запись клиентам
Почему происходит
По умолчанию канал создаётся с правами владельца. Другие процессы в него не пишут.
Как проверить
Посмотрите права и описание сокета.
sudo ls -l /run/myapp/input
systemctl cat myapp.socket | grep -iE "SocketUser|SocketGroup|SocketMode"
Как исправить
Задайте группу и права канала в описании сокета: общая группа с клиентами и права 0620.
2. Каталог канала не создаётся
Почему происходит
Как и для unix-сокетов, каталог в /run нужно объявить через параметр службы.
Как проверить
Посмотрите каталог и параметр.
ls -ld /run/myapp 2>/dev/null
systemctl show myapp.service -p RuntimeDirectory
Как исправить
Объявите каталог через RuntimeDirectory= в службе, которую активирует сокет.
3. Клиент открывает канал на запись раньше читателя
Почему происходит
Открытие канала на запись блокируется, пока нет читателя. При сокет-активации служба поднимается по обращению, но порядок всё равно важен.
Как проверить
Посмотрите состояние сокета и службы.
systemctl status myapp.socket --no-pager | head -6
Как исправить
Держите сокет включённым постоянно: тогда systemd будет читателем и обращения не заблокируются.

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

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

$ sudo ls -l /run/myapp/input
prw------- 1 app app 0 Sep 15 16:02 /run/myapp/input

$ echo test > /run/myapp/input
bash: /run/myapp/input: Permission denied

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

Источники

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