systemdユニットファイルをオーバーライドしてテンプレートユニットファイルを作成することはできますか?


8

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が提供するサービスユニットファイルからのリンクが解除されます。アップグレード時にサービスファイルが拡張される場合は、このアクティビティを再度やり直す必要があります。私の目的は、この直接の依存関係を回避し、代わりにそれをオーバーライド依存関係に変換することです。

何かご意見は?

回答:


6

以下の両方のオプションについて、最初にgrafana-server.service(@なし)をオーバーライドし/etc/systemd/system、抑制ExecStart(それを使用すると想定)して、何も開始しないようにします。に/etc/systemd/system/grafana-server.service.d/10-disable-execstart.conf

[Service]
ExecStart=
WorkingDirectory=/path/to/your/confdir

オプション1-一般的なインスタンスでオーバーライドする

およびgrafana-server@.serviceへの次の構成を使用して、設定に対応するを作成します。[Unit][Service]

[Unit]
PartOf=grafana-server.service
ReloadPropagatedFrom=grafana-server.service

これらはgrafana-server start / stop / restartをすべてのインスタンスにバインドする必要があります。魔法は非常によく文書化されていませんが、あなたが入れた場合<instance_name>.conf、あなたの上のファイルを/path/to/your/confdir、これらすべてのインスタンスが自動的にバインドされます!

オプション2-特定のインスタンスを上書きしてパッケージ構成を維持する

パッケージサービスファイルからすべての更新の良さを維持したいが、カスタムインスタンスオプションのメンテナンスを受け入れる場合は、ジェネリックから各インスタンス名のシンボリックリンクを作成します

/lib/systemd/system/grafana-server.service

/etc/systemd/system/grafana-service@<instance>.service

次に、そのインスタンスの特定のオプションのみをオーバーライドして、

/etc/systemd/system/grafana-server@<instance>.service.d/99-my-options.conf

[Unit][Service]に次の設定を追加してください99-my-options.conf

[Unit]
PartOf=grafana-server.service
ReloadPropagatedFrom=grafana-server.service

これは、インスタンスごとにすべてのgrafana-server.serviceオプションを想定し、それらを99-my-options.confファイル上のすべてのオプションで上書きし、開始/停止/再起動アクションをgrafana-server.serviceにバインドします。

両方のオプションで、実行した場合

systemctl start grafana-server.service

/path/to/confdir/<instance>.confファイルを持つすべてのインスタンスが開始されます。同じことが当てはまり、stopしかもサービス名restartを使用していつでも個別に管理できますgrafana-server@<instance>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.