Как да поправим грешката 'Неуспешно свързване с системната шина' в Linux
Когато работите с команди на systemd като hostnamectl, timedatectl или systemctl, може да срещнете съобщението за грешка "Неуспешно свързване към системния обхват на автобуса чрез местен транспорт: Няма такъв файл или директория". Тази грешка показва, че systemd не може да комуникира с D-Bus системния автобус за съобщения, който е съществен за междупроцесната комуникация в съвременните Linux системи. Този урок ще ви насочи как да диагностицирате и разрешите този проблем на системи, базирани на Debian, въпреки че концепциите важат и за други дистрибуции.
В този урок ще научите:
- Как да диагностицираме грешката „Неуспешно свързване с системната шина“
- Как да проверя дали D-Bus услугата работи
- Как да стартирате и проверите D-Bus услугата
- Как да предотвратим тази грешка в бъдеще
Разбиране на грешката
Грешката на системната шина на обхвата възниква, когато услугата D-Bus не работи, сокетът на D-Bus не е наличен, systemd не може да установи комуникация с D-Bus или проблеми с разрешенията пречат на достъпа до сокета на D-Bus. D-Bus (Desktop Bus) е система за съобщения, която предоставя прост начин за приложенията да комуникират помежду си и със системата. Systemd разчита в значителна степен на D-Bus за своята работа.
hostnamectl
Failed to connect to system scope bus via local transport: No such file or directory
Диагностични стъпки
Преди да се опитате да разрешите проблема, е важно правилно да диагностицирате какво причинява грешката. Следвайте тези стъпки, за да идентифицирате основната причина:
-
Проверете дали systemd работи: Първо, уверете се, че systemd е вашата иницираща система и работи правилно.
ps aux | grep systemd Потвърдете PID 1: Проверете какво работи като PID 1 (инициращият процес)
ps aux | head -2Потвърдете, че systemd е init системата: Проверете дали /sbin/init сочи към systemd
ls -l /sbin/initПроверете статуса на D-Bus: Най-честата причина е D-Bus да не работи. Проверете дали процесите на D-Bus са активни.
ps aux | grep dbusПотвърдете инсталацията на D-Bus: Уверете се, че пакетите на D-Bus са инсталирани
dpkg -l | grep dbusТрябва да видите пакети като dbus, dbus-daemon, dbus-system-bus-common и libdbus-1-3
Очакваният изход трябва да показва поне системните процеси systemd-journald и systemd-udevd, които работят.
Изходът трябва да показва /sbin/init като PID 1, което потвърджава, че systemd е инициализационната система.
Очакваното изходно съдържание трябва да показва символна връзка, сочеща към ../lib/systemd/systemd
Ако само grep самият се появява в изхода, D-Bus не работи и трябва да бъде стартиран.
Решение
След като установите, че D-Bus не работи, решението е просто:
Стартирайте D-Bus услуга: Ако D-Bus е инсталиран, но не работи, стартирайте го ръчно
sudo systemctl start dbusПотвърдете поправката: Тествайте дали командите systemd вече работят
hostnamectlПроверете състоянието на D-Bus услугата: Уверете се, че D-Bus работи правилно
sudo systemctl status dbus
Тази команда ще стартира услугата за системния съобщителен автобус D-Bus веднага.
Успешният изход ще покаже информация за системата, включително име на хост, тип шаси, виртуализация и подробности за операционната система.
Изходът трябва да показва "Активен: активен (работи)" и може да показва, че е задействано от dbus.socket.
Алтернативни решения
Ако основното решение не работи, опитайте тези алтернативни подходи:
Проверете за съобщения за грешки: Прегледайте системните журнали за грешки, свързани с D-Bus.
sudo journalctl -xe | grep dbusПреинсталирайте D-Bus пакетите: Ако D-Bus е повреден, преинсталирайте го
sudo apt-get install --reinstall dbus dbus-daemonПроверете за проблеми с файловете на сокета: Уверете се, че файлът на сокета D-Bus съществува
ls -la /var/run/dbus/system_bus_socket
Това ще покаже последните записи в логовете, които може да посочват защо D-Bus не успя да се стартира.
Това ще преинсталира D-Bus пакетите без да премахва конфигурационните файлове.
Файлът с сокета трябва да съществува и да бъде достъпен от системата.
Заключение
Грешката „Не успя да се свърже с автобусната система“ обикновено се появява, когато D-Bus не работи. Стартирането на услугата D-Bus с systemctl start dbus обикновено решава проблема веднага. Тъй като D-Bus се активира чрез активация на сокети в съвременните реализации на systemd, той трябва да стартира автоматично при бъдещи зареждания без необходимост от явно разрешаване. За да се предотврати този проблем в бъдеще, уверете се, че D-Bus стартира при зареждане, поддържайте системните пакети актуализирани и следете системните журнали за грешки, свързани с D-Bus. За контейнърни среди може да се наложи да се вземат допълнителни предвид, тъй като контейнерите често работят без пълна поддръжка на systemd.

