Решено: Это была предсказуемая проблема с именем сетевого интерфейса, переименование usb0 во что-то странное. Почему это произошло внезапно спустя годы? Я не знаю. Может быть, в первый раз USB-соединение уже было установлено при загрузке, поэтому система решила вести себя как многоинтерфейсная машина?
Так или иначе, проблема решена.
# trigger-poweroff.service
[Unit]
DefaultDependencies=no
Before=shutdown.target
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl --no-block poweroff
DefaultDependencies=no
избегает неявного Conflicts=shutdown.target
. Это означает, что не имеет значения, запущена ли служба в режиме задания replace-irreversible
. Это также позволяет избежать неявного Wants=sysinit.target
; это было бы неоптимально, например. если вы хотите запустить эту службу после перехода на emergency.target
.
Before=shutdown.target
гарантирует, что служба завершится до того, как systemd -shutdown начнет отправлять сигналы. По крайней мере, это упрощает анализ блока на правильность. Мы избегаем взаимоблокировки, следя за тем, чтобы служба не ждала завершения отключения питания.
Не имеет значения, если systemd-shutdown
завершит процесс systemctl с помощью SIGTERM. Процесс просто завершится со статусом WIFSIGNAL
и WTERMSIG
из SIGTERM
. Systemd рассматривает это как чистый и успешный выход.См. определение SuccessExitStatus в man systemd.exec
. Однако, если ядро загадочным образом не запланировало этот первоначальный выход до завершения работы systemd DEFAULT_TIMEOUT_USEC
, systemd -, оно отправило бы неблокируемый сигнал SIGKILL. Systemd не будет рассматривать это как успешный выход.