Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
systemd Error: Socket service entered failed state (Socket activation failed) Linux / DevOps

Ошибка systemd: Socket service entered failed state — Решение

Обновлено: 18.08.2026  ·  Официальная база знаний

При использовании механизма Socket Activation управляющий сокет переходит в аварийный режим, а связанный сервис не запускается. В журнале фиксируется ошибка: Socket service entered failed state или Failed to listen on unit socket: Address already in use.

КомпонентСтатус / ОшибкаПричина инцидента
.socket юнитfailed (Result: resources / exit-code)Порт или сокет-файл уже захвачен другим процессом (EADDRINUSE)
.service юнитinactive (dead)Сервис не получает файловый дескриптор от systemd
UNIX сокет-файлEACCES (Permission denied)Неверные директивы SocketMode, SocketUser или SELinux блокировка
  • Клиентские подключения к сокету сбрасываются с ошибкой Connection refused.
  • Команда systemctl status <name>.socket отображает: Unit entered failed state.
  • В логах ядра: systemd[1]: foo.socket: Unit entered error state: Address already in use.
  1. Определите, какой сокет вызвал ошибку, и проверьте его текущий статус:
    sudo systemctl status *.socket --failed
    sudo journalctl -xeu <unit_name>.socket
  2. Проверьте, занят ли порт сторонним процессом, работающим в обход systemd:
    sudo ss -tulpn | grep <port_number>
    # Либо для UNIX-сокета:
    sudo lsof /path/to/socket.sock
  3. Если порт занят монолитным процессом, остановите его и отключите автозагрузку:
    sudo systemctl stop <conflicting_standalone_service>
    sudo systemctl disable <conflicting_standalone_service>
  4. Если сбой касается UNIX-сокета, проверьте права и удалите зависший мертвый файл сокета:
    sudo rm -f /run/<socket_name>.sock
    # Настройте права в секции [Socket] юнита:
    # SocketMode=0660
    # SocketUser=www-data
    # SocketGroup=www-data
  5. Выполните перезагрузку конфигурации и активируйте сокет заново:
    sudo systemctl daemon-reload
    sudo systemctl restart <unit_name>.socket
Важно: При использовании socket activation в самом приложении необходимо использовать поддержку sd_listen_fds, либо приложение должно принимать переданный дескриптор, не пытаясь самостоятельно вызывать повторный bind() на тот же порт.
Практический опыт инженера: Классический пример ошибки: одновременный запуск `docker.socket` и ручной запуск `dockerd` с флагом `-H fd://`. Убедитесь, что служба не пытается забиндить адрес дважды.

Частые вопросы (FAQ)

Что такое Socket Activation в systemd?

Это механизм, при котором systemd заранее создает и слушает сетевой или UNIX-сокет. При поступлении первого входящего пакета systemd мгновенно запускает целевой сервис и передает ему открытый файловый дескриптор.

Почему при запуске .service файла падает .socket файл?

Если в конфигурации .service файла приложение пытается самостоятельно открыть тот же порт (bind), возникает конфликт адреса (Address already in use), так как порт уже занят процессом systemd через .socket юнит.

Как проверить список всех активных сокетов systemd?

Используйте утилиту systemctl list-sockets, которая покажет адреса прослушивания, связанные сервисы и состояние очередей.

Как восстановить упавший сокет без перезагрузки ОС?

Выполните sudo systemctl reset-failed <name>.socket, затем sudo systemctl start <name>.socket.