Вопрос или проблема
У меня есть машина на 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
) отсутствуют или неправильно сконфигурированы.
Шаги:
-
Проверьте наличие файлов служб
Убедитесь, что для всех перечисленных служб существуют соответствующие файлы.service
в директории/lib/systemd/system
. Если их нет, вам может потребоваться переустановить соответствующие пакеты, чтобы восстановить эти файлы:sudo apt-get install --reinstall <package-name>
-
Обновите систему
Возможно, система просто нуждается в обновлении. Обновите список пакетов и установите все доступные обновления:sudo apt-get update sudo apt-get upgrade
-
Проверьте зависимые службы
Возможно, некоторые службы зависят от других. Откройте файл службы, напримерwatchdog.service
, и убедитесь, что в нем есть секция[Install]
. Если это не так, добавьте ее:[Install] WantedBy=multi-user.target
2. Автоматический запуск watchdog
Для настройки автоматического запуска службы watchdog выполните следующие шаги:
-
Активируйте службу
Если служба watchdog не имеет секции[Install]
, вы можете создать файл для его активации или использовать следующее:sudo systemctl enable watchdog
-
Запустите службу вручную
Для проверки корректности работы службы, выполните:sudo systemctl start watchdog
3. Проблема с RTC
Если проблема с процессом fixrtc
все еще остается:
-
Проверьте конфигурацию RTC
Убедитесь, что ваши настройки для аппаратного реального времени (RTC) корректны. Испытайте следующее:sudo hwclock --systohc
Это обновит аппаратные часы с учётом текущих системных.
-
Удалите ненужные службы
Еслиfixrtc
продолжает висеть, возможно, следует временно отключить его в конфигурацииsystemd
. Это можно сделать:sudo systemctl mask systemd-timesyncd.service
Заключение
Если после выполнения вышеуказанных шагов проблемы останутся, рекомендуется рассмотреть возможность полного переустановки системы из-за возможных конфликтов, возникших после обновления. Это обеспечит чистую установку, в которой все зависимости и службы будут настроены правильно.
Не забудьте создать резервные копии важных данных перед выполнением серьезных изменений в системе.