
同じターゲットにグループ化されたすべてのユニットを停止する方法を知りたいです。
私の設定は次のとおりです。次の内容を含む複数のデバイス構成ファイルがあります。
[Unit]
...
[Service]
...
[Install]
WantedBy=mycustom.target
私が走るとき
# systemctl start mycustom.target
「必須」単位はmycustom.target
正しく開始されます。今、あなたが望むすべてのユニットをブロックできるようになれば幸いですmycustom.target
。私は試した:
# systemctl stop mycustom.target
しかし、これはうまくいきません。同じターゲットが(明示的に)必要なすべてのユニットを停止せずにこれを行う方法はありますか?
答え1
指示を使用してくださいPartOf=
。
依存関係の設定はRequires =に似ていますが、デバイスを停止して再起動することに制限されています。 systemdがここにリストされているデバイスを停止または再起動すると、ジョブはそのデバイスに伝播されます。これは一方向の依存関係です。このデバイスを変更しても、リストされているデバイスには影響しません。
PartOf=mycustom.target
答え2
編集:PartOf=
この回答を書くときに存在しなかったディレクティブは、より良い解決策です。詳しくは他の回答をご覧ください。
暗黙的な方法と明示的な方法の2つの方法があります。
最初の方法——StopWhenUnneeded=
最初の方法は次のとおりです。StopWhenUnneeded=
指示する。ユニットにこの機能がある場合、StopWhenUnneeded=yes
そのユニットのアクティブユニットがもう存在しない場合は自動的に停止します。したがって:Wants=
Requires=
- これらのユニットがある場合にのみ
WantedBy=
ただ合格mycustom.target
- これらのデバイスは手動で起動できません(
systemctl start myunit.service
つまり、起動後すぐに停止します)。
2番目の方法 - シェルパイプライン
2番目の方法は、systemctl show -p
抽出用の単純なシェルパイプラインを設定することですmycustom.target
。
もっと具体的にsystemctl show UNIT
見せるとみんなセルのプロパティをKEY = VALUEとしてマークし、systemctl show -p PROPERTIES UNIT
同じ操作を実行して表示されるプロパティのセットを制限します。だから:
systemctl stop -- $(systemctl show -p Wants mycustom.target | cut -d= -f2)