web-dev-qa-db-ja.com

systemd oneshotサービスが完了するまで待ちます

サーバーのプロビジョニングを行っています。インストール後にスクリプトを実行する必要があります。システムを完全に機能させ、サービスを含める必要があるためです。だから私はそれを%postキックスタートファイルのセクション。

代わりに、自分自身を最後に無効にするsystemdサービスを作成しました。

[Unit]
Description=Prepare the system after installation

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

[Install]
WantedBy=multi-user.target

問題は、初回起動時にログインプロンプトが表示され、「初回起動スクリプト」がまだ実行されているときにログインしてシステムの使用を開始できることです。

これにより、システムをセットアップする管理者は、システムが実際には終了していない場合でも、システムが終了したように見えます。

代わりに、サービスに起動を遅らせて、できれば「システムを準備しています。しばらくお待ちください...」のようなメッセージを表示し、スクリプトが終了するまでそこを待ちます。

5

ここで答えを見つけました: 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
[email protected] [email protected] [email protected] [email protected] [email protected] [email protected]

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

[Install]
WantedBy=multi-user.target
3

ログインマネージャーとしてGDMを使用していると想定して、Before=gdm.service の中に [Unit] セクション。

Gdmを使用しない場合は、xorgを起動するサービスを見つけて、Before=行。

これにより、ログインマネージャーが表示される前にタスクが完了します。

1
Mark Stosberg