systemd Error: Failed to open private bus connection: Connection refused
Linux / DevOps
Ошибка systemd: Failed to open private bus connection — Решение
Команды управления службами systemctl, loginctl или journalctl возвращают критический отказ: Failed to open private bus connection: Connection refused или Failed to connect to bus: Host is down.
| Окружение | Первопричина | Симптом |
|---|---|---|
| Docker / LXC контейнер | Systemd не запущен как PID 1 (запущен bash/sh) | Команды systemctl не работают внутри контейнера |
| Chroot / LiveCD | Отсутствует монтирование /run/systemd/private | systemctl не может связаться с PID 1 хоста |
| Полноценная ОС Linux | Падение демона dbus.service / systemd-sysv | Полный отказ IPC шины управления сервисами |
- Если ошибка возникает в Docker контейнере: systemd не предназначен для запуска внутри стандартного контейнера без специализированного Entrypoint. Запускайте сервисы напрямую либо используйте контейнеры с поддержкой systemd init.
- Если ошибка возникает в chroot-окружении, используйте команду
systemctlс флагом--rootили заменяйте операции утилитойservice/update-rc.d:# Вне chroot: sudo systemctl --root=/mnt enable <service> - На реальном сервере проверьте статус сокета dbus и сокета приватной шины:
ls -la /run/systemd/private ls -la /run/dbus/system_bus_socket - Если сокеты отсутствуют из-за переполнения
/run, освободите память tmpfs:df -h /run sudo systemctl daemon-reexec
Архитектурный совет: Для управления сервисами внутри chroot используйте прямой вызов бинарников или `systemctl daemon-reload` через хостовую систему с монтированием `/run`.
Практический опыт инженера:
Если эта ошибка возникла на рабочей bare-metal машине, ядро потеряло связь с PID 1 или процесс systemd завис в D-state (uninterruptible sleep). Проверьте `dmesg` на наличие hardware trace.
Частые вопросы (FAQ)
Что означает команда systemctl daemon-reexec?
Она перезапускает управляющий процесс systemd (PID 1) с сохранением состояния всех запущенных юнитов и пересозданием системных сокетов IPC.
Почему systemctl не работает внутри chroot?
Потому что chroot изолирует файловую систему и скрывает сокет /run/systemd/private, через который клиент systemctl общается с PID 1.