他のサービスの開始中に一部のサービスを一時的に停止します。

他のサービスの開始中に一部のサービスを一時的に停止します。

2つのサービスがあります。 1つはコアサービスで、もう1つは本質的にコアサービスを監督するサービスです。ライフサイクルは次のように指定されます。

  • 監視サービスは、コアサービスの開始時に開始する必要があります。
  • コアサービスが失敗しても、Overwatchサービスはアクティブなままにしてください。

coreこれらの制約を2つのシステムサービスとして実装することは、2つの別々のサービスを作成して開始するのと同じくらい簡単ですoverwatch

core.service

[Unit]
Description=Some Core Service
Wants=overwatch.service

[Service]
Type=forking
ExecStart=/some/core/executable

# ...

overwatch.service

[Unit]
Description=Some Overwatch Service

[Service]
Type=simple
ExecStart=/some/overwatch/executable

# ...

しかし、私は別の制限:起動core中はoverwatchサービスを有効にできません。私が試した解決策は、overwatch始める直前に停止してcore再起動することでしたoverwatch。そのために、次のようにサービスにExecStartPreディレクティブをBefore追加してみましたcore

[Unit]
Description=Some Core Service
Wants=overwatch.service
Before=overwatch.service

[Service]
Type=forking
ExecStart=/some/core/executable
ExecStartPre=+systemctl stop overwatch.service

# ...

overwatch死んでもまだ生きていますが、core再起動する前に正常に停止します。ただし、ディレクティブのため、core成功した起動後もsystemdが再起動すると予想されます。coreWantsBeforeしかし、そのようなことは起こりませんでした。

する効果があったのは、ディレクティブで手動で再起動することでしたExecStartPost

[Unit]
Description=Some Core Service

[Service]
Type=forking
ExecStart=/some/core/executable
ExecStartPre=+systemctl stop overwatch.service
ExecStartPost=+systemctl start overwatch.service

# ...

しかし、もっと良い方法があるかどうか疑問に思います。他のサービスを手動で停止して開始するには、事前および後の起動フックを使用するよりも、推奨される説明的な方法で私の要件を表現する方が良いです。

ベストアンサー1

おすすめ記事