2つのバージョンのサービスがありますが、時々my-service-aとmy-service-bを切り替えたいと思います。 my-service-aがシステムの起動時に常に実行されるサービスになることを願っています。現在これらを切り替えるには、aからbに切り替えるなど、複数のコマンドを実行する必要があります。
systemctl stop my-service-a
systemctl start my-service-b
そして、systemdは一度に1つだけ実行することを強制しません。ただ注意してください。
systemdでこの状況を直接サポートしていますか?これをサービス間の「切り替え」サポートまたはテンプレートサービスのインスタンス化と考えることも、相互に排他的なサービスのサポートと考えることもできるため、my-service-bを起動するとmy-service-aが自動的に停止します。 。あるいは、まったく異なる方法があるかもしれません。
答え1
Conflicts=
両方のユニットファイルのセクションにディレクティブを追加するだけです[Unit]
(Conflicts=
1つのユニットファイルでも機能します)。マニュアルページからシステムユニット(5):
スペースで区切られた単位名のリスト。否定的な要件依存関係を構成します。あるユニットが別のユニットに衝突=を設定した場合、前者を起動すると後者は停止し、その逆の場合も同様です。この設定は After= および Before= 順序依存関係とは無関係で直交です。