Странности Systemd: Не удаётся добавить зависимость, файл существует.

Вопрос или проблема

У меня есть машина на Debian armel, работающая на Wheezy, которую я сегодня обновил до Debian Testing. Как вы можете догадаться из заголовка, systemd ведет себя странно в двух аспектах:

1) При загрузке появляется множество ошибок “Невозможно добавить зависимость X к Y.target, игнорируется: файл существует”, однако система, похоже, загружается нормально. Ошибки:

20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость -.mount к local-fs.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-journald.service к sysinit.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость udev.service к basic.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-journald-dev-log.socket к sockets.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость udev-control.socket к sockets.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость udev-kernel.socket к sockets.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-journald.socket к sockets.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-journald-audit.socket к sockets.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-update-utmp-runlevel.service к graphical.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость rsyslog.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость remote-fs.target к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость dbus.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-user-sessions.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-update-utmp-runlevel.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость org.freedesktop.login1.busname к busnames.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость rsyslog.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость ssh.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость remote-fs.target к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость cron.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость rc-local.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость dbus.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-user-sessions.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-ask-password-wall.path к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-logind.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость getty.target к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-update-utmp-runlevel.service к multi-user.target, игнорируется: файл существует
20 окт 17:19:42 gw-16b1 systemd[1]: Невозможно добавить зависимость systemd-update-utmp-runlevel.service к rescue.target, игнорируется: файл существует

2) Дефолтный запуск watchdog больше не осуществляется, что приводит к сбросу системы аппаратным watchdog, инициализированным загрузчиком, который я не буду прошивать без доступа по JTAG. Попытка включить его с помощью ‘systemctl -f enable watchdog’ приводит к этой ошибке:

Синхронизация состояния watchdog.service с SysV init с /lib/systemd/systemd-sysv-install...
Выполнение /lib/systemd/systemd-sysv-install enable watchdog
insserv: предупреждение: текущий запуск уровня (2 3 4 5 S) сценария `watchdog' переопределяет LSB по умолчанию (2 3 4 5).
[ 3269.248986] systemd[1]: Невозможно добавить зависимость cron.service к multi-user.target, игнорируется: файл существует
[ 3269.279002] systemd[1]: Невозможно добавить зависимость systemd-user-sessions.service к multi-user.target, игнорируется: файл существует
[ 3269.309118] systemd[1]: Невозможно добавить зависимость getty.target к multi-user.target, игнорируется: файл существует
insserv: предупреждение: текущий запуск уровня (2 3 4 5 S) сценария `watchdog' переопределяет LSB по умолчанию (2 3 4 5).
[ 3273.549003] systemd[1]: Невозможно добавить зависимость rc-local.service к multi-user.target, игнорируется: файл существует
[ 3273.579012] systemd[1]: Невозможно добавить зависимость systemd-ask-password-wall.path к multi-user.target, игнорируется: файл существует
[ 3276.708974] systemd[1]: Невозможно добавить зависимость rc-local.service к multi-user.target, игнорируется: файл существует
[ 3276.738972] systemd[1]: Невозможно добавить зависимость systemd-ask-password-wall.path к multi-user.target, игнорируется: файл существует
[ 3276.768990] systemd[1]: Невозможно добавить зависимость systemd-update-utmp-runlevel.service к multi-user.target, игнорируется: файл существует
Файлы юнитов не содержат раздел [Install]. Их нельзя включать с помощью systemctl.
Возможные причины наличия таких юнитов:
1) Юнит может быть статически включен, будучи связанным с директории .wants/ или .requires/ другого юнита.
2) Цель юнита может заключаться в том, чтобы служить помощником для другого юнита, который имеет зависимость от него.
3) Юнит может быть запущен по мере необходимости через активацию (сокет, путь, таймер, D-Bus, udev, вызов systemctl через сценарий и т. д.).

3) По-видимому, также что-то странное с RTC, потому что после обновления процесс root 1 22.3 1.2 6372 3184 ? Ss 18:16 0:15 /sbin/init fixrtc остается запущенным, несмотря на то, что и RTC, и ntpdate работают нормально.

Как избавиться от всех предупреждений systemd и сделать так, чтобы watchdog автоматически запускался? Простая команда service watchdog start работает нормально, так что это определенно проблема systemd.

Это означает, что файлы служб systemd для всех перечисленных инструментов/пакетов отсутствуют. Вам нужно найти файлы toolname.service и поместить их в /lib/systemd/system.

Проще говоря, ваши команды служб systemd не будут работать для инструментов, о которых система предупреждает во время загрузки. Я рекомендую вам сделать резервную копию ваших данных и выполнить чистую установку, так как обновление привело к проблемам.

Ответ или решение

Проблемы, о которых вы сообщаете, связаны с несовместимостью между системными службами и целями (targets) после обновления до более новой версии Debian с поддержкой systemd. Вот шаги, которые помогут вам устранить эти предупреждения и настроить автоматический запуск службы watchdog.

1. Уст消ение предупреждений о зависимости

Сообщения о том, что не удается добавить зависимости, указывают на наличие конфликтов между различными службами systemd. Обычно это происходит, когда файлы обслуживания служб (.service) отсутствуют или неправильно сконфигурированы.

Шаги:

  1. Проверьте наличие файлов служб
    Убедитесь, что для всех перечисленных служб существуют соответствующие файлы .service в директории /lib/systemd/system. Если их нет, вам может потребоваться переустановить соответствующие пакеты, чтобы восстановить эти файлы:

    sudo apt-get install --reinstall <package-name>
  2. Обновите систему
    Возможно, система просто нуждается в обновлении. Обновите список пакетов и установите все доступные обновления:

    sudo apt-get update
    sudo apt-get upgrade
  3. Проверьте зависимые службы
    Возможно, некоторые службы зависят от других. Откройте файл службы, например watchdog.service, и убедитесь, что в нем есть секция [Install]. Если это не так, добавьте ее:

    [Install]
    WantedBy=multi-user.target

2. Автоматический запуск watchdog

Для настройки автоматического запуска службы watchdog выполните следующие шаги:

  1. Активируйте службу
    Если служба watchdog не имеет секции [Install], вы можете создать файл для его активации или использовать следующее:

    sudo systemctl enable watchdog
  2. Запустите службу вручную
    Для проверки корректности работы службы, выполните:

    sudo systemctl start watchdog

3. Проблема с RTC

Если проблема с процессом fixrtc все еще остается:

  1. Проверьте конфигурацию RTC
    Убедитесь, что ваши настройки для аппаратного реального времени (RTC) корректны. Испытайте следующее:

    sudo hwclock --systohc

    Это обновит аппаратные часы с учётом текущих системных.

  2. Удалите ненужные службы
    Если fixrtc продолжает висеть, возможно, следует временно отключить его в конфигурации systemd. Это можно сделать:

    sudo systemctl mask systemd-timesyncd.service

Заключение

Если после выполнения вышеуказанных шагов проблемы останутся, рекомендуется рассмотреть возможность полного переустановки системы из-за возможных конфликтов, возникших после обновления. Это обеспечит чистую установку, в которой все зависимости и службы будут настроены правильно.

Не забудьте создать резервные копии важных данных перед выполнением серьезных изменений в системе.

Оцените материал
Добавить комментарий

Капча загружается...