Ошибка «не удалось запустить демон» появляется в терминале Linux при команде systemctl start, в Android при запуске adb daemon или при старте фоновых служб вроде sshd, dockerd и mysqld. Чаще всего служба падает сразу после старта из-за синтаксической ошибки в конфигурационном файле, занятого порта или отсутствия прав на рабочие каталоги — и универсального «лечения» здесь нет, нужна диагностика по логам.
Демон — это фоновый процесс, который работает без привязки к терминалу: веб-сервер, служба печати, менеджер контейнеров. Когда система сообщает, что запуск не удался, она обычно уже знает причину, но выводит её не в основное сообщение, а в журнал. Поэтому первый шаг — не перезагружать систему и не переустанавливать пакет, а посмотреть, что именно записала служба перед падением.
Ниже разберём порядок диагностики для Linux (systemd), отдельно — ситуацию с ADB daemon на Android/ПК, а также типовые причины и способы устранения. Инструкции построены от безопасных проверок к более глубоким вмешательствам.
Шаг 1. Смотрим статус службы и журнал ошибок
Самое информативное действие при отказе демона — запросить статус через systemctl. Вывод покажет код завершения, последние строки журнала и время падения:
systemctl status имя_службы
journalctl -u имя_службы -n 50 --no-pager
Обратите внимание на строки с failed, error и кодом выхода вроде status=1/FAILURE. Именно они указывают на конкретную причину: невалидный параметр конфигурации, отсутствующий файл, отказ в доступе или занятый порт.
- 🔍 UNIT not found — служба с таким именем не установлена или опечатка в названии; проверьте список через
systemctl list-unit-files | grep имя. - 📄 config test failed — ошибка синтаксиса в конфигурационном файле, демон отказывается стартовать с битой конфигурацией.
- 🔒 Permission denied — служба не может прочитать файл, открыть каталог или привязаться к привилегированному порту.
- 🔌 Address already in use — порт, который нужен демону, уже занят другим процессом.
Шаг 2. Проверяем конфигурационный файл
Частая причина, когда демон не запускается после правки настроек, — синтаксическая ошибка в конфиге: лишняя скобка, пропущенная кавычка, неверный отступ в YAML. Многие службы умеют проверять собственную конфигурацию без запуска, например nginx -t или sshd -t. Если ваша служба поддерживает такой режим, используйте его до перезапуска.
Если ошибка появилась после ваших правок, самый быстрый путь — вернуть предыдущую версию файла. Хорошая привычка — перед редактированием делать копию: cp config.conf config.conf.bak. Тогда откат займёт секунды, а не часы поиска потерянного символа.
⚠️ Внимание: не редактируйте конфигурацию «вслепую», удаляя строки наугад. Если не уверены в назначении параметра, сверьтесь с официальной документацией службы — некорректное значение может не только мешать запуску, но и менять поведение работающего демона.
Шаг 3. Права доступа и владелец файлов
Демоны в Linux обычно работают от отдельного системного пользователя, а не от root. Если рабочие каталоги, файлы сокетов или логи принадлежат другому владельцу, служба получит Permission denied и завершится. Такое часто случается после ручного копирования данных, восстановления из бэкапа или запуска команд от root, которые «перехватили» владение файлами.
Проверьте владельца рабочих каталогов службы командой ls -la и сопоставьте с пользователем, указанным в unit-файле (директива User=). Исправить владельца можно через chown, но делайте это осознанно: рекурсивная смена прав на системные каталоги способна сломать другие службы.
Отдельный случай — SELinux или AppArmor в режиме enforcing. Даже корректные права не помогут, если мандатная система безопасности блокирует доступ. Отказ SELinux виден в журнале аудита (ausearch -m avc -ts recent); решение — настроить политику или контекст файлов, а не отключать защиту целиком.
☑️ Базовая диагностика демона
Шаг 4. Конфликт портов и зависимости
Если журнал сообщает Address already in use, значит, порт уже слушает другой процесс. Найти виновника помогает команда:
ss -tulpn | grep :номер_порта
Дальше два варианта: либо остановить конфликтующий процесс, либо переназначить порт в конфигурации вашего демона. Типичный сценарий — старый экземпляр службы, запущенный вручную вне systemd, который мешает старту «официального» юнита.
Также демон может не стартовать из-за зависимостей: например, службе нужна сеть или смонтированный диск, а они ещё не готовы. В unit-файле за это отвечают директивы After= и Requires=. Если служба падает только при загрузке системы, но вручную стартует нормально — вероятная причина именно в порядке запуска.
Таблица типовых причин и решений
| Симптом в журнале | Вероятная причина | Что делать |
|---|---|---|
| config test failed | Синтаксическая ошибка в конфиге | Исправить файл или откатить копию .bak |
| Permission denied | Неверный владелец файлов или SELinux | Проверить chown, журнал аудита |
| Address already in use | Порт занят другим процессом | Найти процесс через ss, освободить порт |
| Dependency failed | Не готова сеть, диск или другая служба | Проверить After=/Requires= в unit-файле |
| Start request repeated too quickly | Служба падала в цикле, systemd заблокировал рестарты | Устранить причину, затем systemctl reset-failed |
⚠️ Внимание: после серии неудачных запусков systemd может перевести юнит в состояние start-limit-hit и отказываться стартовать его даже после исправления причины. Сбросьте счётчик командой systemctl reset-failed имя_службы, иначе будете исправлять уже здоровую службу, которая всё равно «не запускается».
Отдельный случай: ADB daemon на Android и ПК
Сообщение вида «cannot start daemon» или зависание на waiting for device при работе с ADB — частая ситуация при подключении Android-устройства к компьютеру. Здесь причины свои: конфликт версий adb, занятый локальный порт сервера или отсутствие подтверждения отладки на самом устройстве.
Безопасный порядок действий такой. Сначала перезапустите сервер: adb kill-server, затем adb start-server. Проверьте, что на смартфоне включена отладка по USB в разделе «Для разработчиков» и что при подключении вы подтвердили запрос на разрешение отладки — без этого подтверждения устройство будет видно как unauthorized. Если используете несколько инструментов (например, эмулятор и standalone adb), убедитесь, что работает одна версия adb: разные версии конфликтуют за один сервер.
Почему adb показывает unauthorized
Устройство ожидает подтверждения RSA-ключа на экране смартфона. Разблокируйте экран, отзовите старые разрешения в настройках разработчика («Отозвать авторизацию USB-отладки»), переподключите кабель и подтвердите запрос заново. Также проверьте сам кабель — часть кабелей передаёт только питание без данных.
Когда ничего не помогает
Если журнал пуст, конфиг валиден, а демон всё равно не стартует, попробуйте запустить его вручную в foreground-режиме — многие службы имеют флаг отладки (например, -d или --debug). Вывод напрямую в терминал покажет ошибку, которая теряется при фоновом запуске. Какой именно флаг поддерживает ваша служба, смотрите в её документации.
Крайние меры — переустановка пакета и сброс конфигурации к заводской — применяйте последними и только после сохранения текущих настроек. Для серверных служб, обрабатывающих важные данные (базы данных, почтовые серверы), перед любыми радикальными действиями сделайте резервную копию данных или привлеките администратора.
Частые вопросы
Что такое демон простыми словами?
Демон — это фоновая программа, которая работает постоянно и не требует взаимодействия с пользователем: веб-сервер, служба печати, менеджер базы данных. В Linux такими процессами управляет система инициализации, чаще всего systemd.
Почему служба запускается вручную, но не стартует при загрузке?
Наиболее вероятная причина — не настроены зависимости: демону нужна сеть, смонтированный диск или другая служба, которые к моменту его запуска ещё не готовы. Проверьте директивы After= и Wants=/Requires= в unit-файле и убедитесь, что юнит включён: systemctl enable имя_службы.
Что делать с ошибкой «start-limit-hit»?
Это защита systemd от бесконечных перезапусков падающей службы. Сначала устраните первопричину по журналу, затем выполните systemctl reset-failed имя_службы и только после этого запускайте службу снова.
ADB пишет «cannot connect to daemon» — это проблема телефона или ПК?
Чаще всего — ПК: конфликт версий adb, занятый порт сервера или зависший процесс. Выполните adb kill-server и adb start-server. Если не помогло — проверьте кабель, порт USB и подтверждение отладки на самом устройстве.
Безопасно ли отключать SELinux, чтобы демон запустился?
Отключение защиты убирает симптом, но снижает безопасность системы и не устраняет причину. Правильный путь — найти запрет в журнале аудита и настроить политику или контекст файлов. Временный перевод в permissive-режим допустим только для проверки, что проблема действительно в SELinux.