Centos

等待 systemd oneshot 服務完成

  • February 24, 2017

我正在做一些伺服器配置,我需要在安裝後執行一個腳本,因為它要求系統功能齊全,包括服務。所以我不能把它放在%post我的 kickstart 文件的部分。

相反,我創建了一個 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=行中。

這將導致任務在登錄管理器顯示之前完成。

引用自:https://serverfault.com/questions/834719