Назад | Перейти на главную страницу

Дождитесь завершения работы службы systemd oneshot

Я выполняю некоторую подготовку сервера, и мне нужно запустить сценарий ПОСЛЕ установки, поскольку он требует, чтобы система была полностью функциональной, включая службы. Так что я не могу поместить это внутрь %post раздел моего файла кикстарта.

Вместо этого я создал службу systemd, которая отключает себя в последнюю очередь.

[Unit]
Description=Prepare the system after installation

[Service]
Type=oneshot
ExecStart=/usr/bin/prepare-system

[Install]
WantedBy=multi-user.target

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

Это дает администратору, настраивающему систему, иллюзию того, что система завершена, хотя на самом деле это не так.

Вместо этого я бы хотел, чтобы служба откладывала загрузку, желательно показывая сообщение типа «Система готовится, пожалуйста, подождите ...» и ждала там, пока сценарий не завершится.

Нашел ответ здесь: https://unix.stackexchange.com/questions/216045/systemd-configure-unit-file-so-that-login-screen-is-not-shown-until-service-exi

Просто установите Before когда терминал доступен:

[Unit]
Description=Prepare the system after installation
Before=getty@tty1.service getty@tty2.service getty@rrt3.service getty@tty4.service getty@tty5.service getty@tty6.service

[Service]
Type=oneshot
ExecStart=/usr/bin/prepare-system

[Install]
WantedBy=multi-user.target

Предполагая, что вы используете GDM в качестве менеджера входа в систему, добавьте строку с Before=gdm.service в [Unit] раздел.

Если вы не используете gdm, выясните, какая служба запускает xorg, и поместите это в Before= линия.

Это приведет к завершению задачи до отображения диспетчера входа в систему.