1 つのターゲットで複数の systemd サービスを再起動することは可能ですか?

1 つのターゲットで複数の systemd サービスを再起動することは可能ですか?

再起動しなければならないサービス ユニット ファイルが多数ありますが、すべてを入力したくありません。他のサービスを起動する方法をまったく知らない単一のターゲットまたはサービスを用意し、それらをグループ化して、1 つのコマンドですべてを再起動することは可能ですか?

必要に応じて、systemd サービス ユニット ファイルまたはターゲット ファイルをどのように記述すればよいですかsystemctl restart one-to-rule-them-all?

要件: 1. uber ターゲットは、他の多くのサービスが開始されることを望んでいます。2. uber ターゲットは、それらのサービスを開始する方法について何も知らない必要があります。

これを試してもsudo systemctl restart one-to-rule.target何も起こりません。

# /etc/systemd/system/one-to-rule.target
[Unit]
Description=One To Rule Them All
Requires=multi-user.target
Wants=program-api.service  program-gui.service yet-another.service
After=multi-user.target display-manager.service

[Install]
WantedBy=graphical.target

これらのユニットprogram-api.service program-gui.service yet-another.serviceone-to-rule.targetすべて有効になっており、ロードされてアクティブになっているようです。マシンを起動すると、すべてのサービスが希望どおりに起動します。ただし、systemctl restart one-to-rule.target再起動するのではなく、単に入力するか何かしたいだけです。

依存関係グラフは次のようになります

$ systemctl list-dependencies one-to-rule.target
one-to-rule.target
● ├─program-api.service
● ├─program-gui.service
● ├─yet-another.service
● └─multi-user.target

$ systemctl list-dependencies --reverse one-to-rule.target
one-to-rule.target
● └─graphical.target

答え1

PartOf=one-to-rule.targetこれは機能しますが、再起動が伝播されるようにするには、各 .service ユニットに が必要です。(これは実際には の弱いバージョンですRequires=<…>.target。)

残念ながら、反対の依存関係 (ConsistsOf) をターゲット内で直接指定することはできません。すべてのサービス ファイルを拡張する必要があります。

関連情報