systemdでパラメータを使用してサービスへの依存関係を作成するには?

systemdでパラメータを使用してサービスへの依存関係を作成するには?

Type=notifyサービスBが起動する前に初期化する必要があるサービスAがあります。サービスAがダウンした場合、サービスBもそれに従う必要があります。問題は、Aサービスの名前が明確に定義されていないことです。これは[email protected]

これは私のサービスユニットBです

[Unit]
Description=start and shutdown with Service A
[email protected]
[email protected]

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/myprogram --start
ExecStop=/usr/bin/myprogam --stop

サービスコールの例は次のとおりです。

sudo systemctl start [email protected]

しかし、myarg実際には何でもできるので、サービスBからサービスAのハンドルを取得する方法は混乱しています。

編集:これは意図された機能なRequiresので編集中です。BindsTo

それでも動作しません。存在するsudo systemctl status service.B

service.B.service:3: openvpn-client@service に依存関係を追加できません。無視:不明なエラー-22

編集: 部分的な解決。

service.Bでテンプレートサービス(service.A)を参照する代わりに、テンプレートサービスでservice.Bを参照して必要な依存関係を作成できます。

だからサブ..ワンユニット..

[Unit]
Before=service.B
Requires=service.B

[Service]
Type=notify
ExecStart=/usr/sbin/some.program

したがって、service.Aにはservice.Bが必要であり、service.Bの前に開始する必要があります。 この部分は機能しますが、サービスAが終了するとサービスBは終了しません。

ベストアンサー1

どうすればいいのか誤解があります。システム働くあなたのライン[email protected]ラインサービス.B.サービス誤って使用されています。次の行を削除してください。サービス.B.サービス依存関係を追加し、[Eメール保護]良いRequires=service.B.service

systemD文書を注意深く読んでください。ここから始めることをお勧めします。

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

あなたにとって最も興味深い部分は[単位] 一部のオプション。注意深く読んでください!

必要=

...

このデバイスがアクティブになると、リストされたデバイスもアクティブになります。他のデバイスのいずれかがアクティブではなく、注文の依存関係After =が失敗したデバイスに設定されている場合、そのデバイスは起動しません。また、After =を指定するかどうかにかかわらず、他のデバイスの1つが明示的に停止(または再起動)されると、このデバイスは停止(または再起動)されます。

...

おすすめ記事