systemdは、パッケージが提供するユニットファイルをオーバーライドして、サービスの構成/動作に影響を与える優れたメカニズムを提供することを知っています。これは通常、以下のコマンドを使用して行われます
sudo systemctl edit <unitfile>
オーバーライドconfファイルを作成するには
/etc/systemd/system/<unitfile.d>/
Systemdは、テンプレートユニットファイルを定義するための別個のメカニズムも提供し、インスタンス化して実行時にインスタンス固有のユニットを作成します。これには、テンプレートファイルに次の名前を付ける必要があります。
<servicename>@.service
そしてそれを次のようにインスタンス化します
systemctl start <servicename>@<instancename>
現在、パッケージが提供するサービスを複数のユニットインスタンスとして実行したい状況です。独自のテンプレートユニットファイルの作成を避けたいので、パッケージ提供のユニットファイルをオーバーライドしてテンプレートユニットファイルを作成できるかどうかを確認しようとしています。
私の理解では、テンプレートユニットファイルには通常のユニットファイルとは異なる命名規則があるため、パッケージで提供されるユニットファイルを/ etc / systemd / systemに配置してテンプレートファイルで上書きすることはできないと思います。
私がやろうとしていることを達成するための明確な方法はありますか?
特定のシナリオ:grafanaパッケージは、grafana-server.serviceユニットファイルをインストールします。私のマシンで2つのインスタンスのgrafanaを実行したいと思います-DEVとSTG用にそれぞれ1つ。私はこれを行うことができました:
- grafana-server.serviceファイルを変更(%Iを使用してフォルダーの場所とファイルパスを設定)
- 変更されたgrafana-server.serviceの名前をgrafana-server @ .serviceに変更します
次を使用してgrafanaのインスタンスを開始します。
sudo systemctl start grafana-server@dev
そして
sudo systemctl start grafana-server@stg
ただし、これにより、grafanaが提供するサービスユニットファイルからのリンクが解除されます。アップグレード時にサービスファイルが拡張される場合は、このアクティビティを再度やり直す必要があります。私の目的は、この直接の依存関係を回避し、代わりにそれをオーバーライド依存関係に変換することです。
何かご意見は?