再起動しなければならないサービス ユニット ファイルが多数ありますが、すべてを入力したくありません。他のサービスを起動する方法をまったく知らない単一のターゲットまたはサービスを用意し、それらをグループ化して、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.service
はone-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) をターゲット内で直接指定することはできません。すべてのサービス ファイルを拡張する必要があります。