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つが明示的に停止(または再起動)されると、このデバイスは停止(または再起動)されます。
...