ユーザー入力を待機しているときに systemd サービスの起動を一時停止するにはどうすればよいですか?

ユーザー入力を待機しているときに systemd サービスの起動を一時停止するにはどうすればよいですか?

read と sleep ( を使用openvt -w) の両方が実行されます (read -pメッセージが表示されます) が、起動を一時停止することはできません。

私は以下のオプションのさまざまな組み合わせを試しました/etc/systemd/system/<service>:

Type=oneshot
TimeoutSec=5000
StandardInput=tty

ユースケースとしては、サービス スクリプトの実行が停止した後にのみ GUI をロードします。GUI がロードされて /home がローカル パーティション (デフォルト) として「フリーズ」する前に、オプションで sshfs (複数のユーザー名とホスト名のオプションも) を /home としてマウントする必要があります。

答え1

「起動を一時停止する」は systemd には正確には当てはまりません。systemd は複数のサービスを並行して実行します。

ただし、サービスに「依存関係」を追加することで、基本的に「起動を一時停止」してサービスを待機するポイントを指定できます。

上記のユースケースでは、以下を追加します/etc/systemd/system/<service>

[Unit]
Description=commands to run before GUI loads
Before=display-manager.service

これdisplay-manager.serviceにより、待機が強制されます<service>。私の場合は、<service>ユーザー入力(接続できなかった読者のために)、実質的に「起動を一時停止」します。

懐疑的な意見を表明した他のコメント投稿者からのコメントも下記にあります。

この種の使用例には、暗号化されたパーティションのロック解除があります。systemd のバグ (bugs.freedesktop.org/show_bug.cgi?id=88483) のため、すぐに使用できる systemd メカニズムを使用して、起動時に暗号化されたマルチデバイス Btrfs アレイのロックを解除することはできません。独自の systemd サービス ファイルを作成する必要がありますが、この回答には、何時間も試行した後、サービス ファイルに必要な欠落部分が含まれていました。argle さん、ありがとうございます。

関連情報