systemdサービスのグループ化


10

私が.service取り組んでいるシステムを構成するさまざまな部分について、約6のファイルを作成しました。システム全体を少しずつ起動できると便利ですが、への1回の呼び出しでシステム全体を起動する単一のユニットが欲しいsystemctlです。

これを行う最良の方法は何ですか?

回答:


10

すべてのサービスユニットが依存関係としてリストされている、ターゲットタイプのユニットが必要ですWants=。次に、を使用して起動しsystemctl start unitname.targetます。(systemctl isolateここでは使用しないでください。これにより、サービスの依存関係ツリーにあるもの以外はすべてシャットダウンされます。


または、セクションのWantedByキーを使用して、[Install]既存のターゲットをメモすることもできます。たとえば、他のユーザーがログインする前にサービスを常に起動させたい場合は、を使用しますmulti-user.target
saiarcot895 2015

はい、Wants=すべてのサービスを一覧表示したターゲットタイプは、を開始するには十分ですが、ターゲットタイプを使用して作業を停止および再開する方法を見つけることができません。それを可能にするタイプはありますか?
Magnus

マグナス、これの良い解決策を見つけたことがありますか?
Sam Hendley、2015年

2
サム、マグナス:必要なサービスの停止は、各ファイルで.target使用できるように見えます。superuser.com/questions/470153/...StopWhenUnneeded=yes.service
jonnor

1
私の特定のケースでは、グロビングを処理するsystemdツールを使用できます:)したがって、開始にはaを使用し.target、停止には使用しますsystemctl stop foo.\*(関係するすべてのサービスにwitで始まるサービスファイルがあるためfoo.)。
Magnus

2

PartOfターゲットに加えてターゲットグループのサブユニットで使用してみWantsましたか?例:PartOf=foo.targetin foo-sub1.serviceおよびWants=foo-sub1.service foo-sub2.servicein foo.target。私はこれを試してみて、ターゲットを開始および停止するだけで、すべてのサブユニットを開始および停止することができました。

PartOf =

Requires =と同様の依存関係を設定しますが、ユニットの停止と再起動に限定されます。systemdがここにリストされているユニットを停止または再起動すると、アクションはこのユニットに伝播されます。これは一方向の依存関係であることに注意してください。このユニットを変更しても、リストされているユニットには影響しません。

PartOf = b.serviceがa.serviceで使用されると、この依存関係はb.serviceのプロパティリストでConsistsOf = a.serviceとして表示されます。ConsistsOf =依存関係を直接指定することはできません。


U&Lへようこそ!投稿が質問への回答を提供しない場合は、質問の下のコメントセクションに投稿する必要があります。
Yurij Goncharuk

これにより、Tom Huntによる答えの残りの半分、つまりサービスのグループ全体を停止する機能が提供されます。
Benny Jobigan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.