systemd: останавливать процесс загрузки при сбое (фактически производить выключение)

То, что вы использовали, называется подстановкой , которая не может фильтровать каталог или файл в оболочках POSIX.

С zsh :

print -rl -- [^L]*(/)

Если вам нужны скрытые каталоги:

print -rl -- [^L]*(D/)

ПОЗИЦИОННО:

find . ! -name . -prune ! -name 'L*' -type d
1
06.07.2016, 15:20
2 ответа

Должен существовать "типичный" способ. Например, если точка монтирования не может быть загружена, система переводится в режим обслуживания и загрузка прерывается.

Да, есть. И если вы посмотрите на /usr/lib/systemd/system/local-fs.target, то обнаружите, что это

OnFailure=emergency.target
OnFailureJobMode=replace-irreversibly
2
27.01.2020, 23:47

Я вижу пару вариантов. Один из них - это жестокий вариант, который может быть подходящим для системы без сохранения состояния, которую невозможно повредить. То есть добавить параметр - force в poweroff

poweroff --force

В документации для него сказано: «Принудительная немедленная остановка, выключение питания, перезагрузка. Не связывайтесь с системой инициализации».

Другие службы продолжат запускаться параллельно, но отключение питания должно происходить быстрее.


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

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

Вы можете решить вашу проблему, принудительно приостановив процесс загрузки и дождавшись завершения вашей задачи, прежде чем продолжить. Во-первых, решите, какие службы должны запускаться до завершения работы вашей пользовательской службы, затем добавьте эти службы или цели в файл с новыми записями Before = .

0
27.01.2020, 23:47

Теги

Похожие вопросы