systemd インスタンス化サービスの異なるインスタンスに異なるリソース制限を指定するにはどうすればよいですか?

systemd インスタンス化サービスの異なるインスタンスに異なるリソース制限を指定するにはどうすればよいですか?

私の能力を超えた理由により、ベアメタル OS を搭載した物理ホスト上で DB サーバーの複数のインスタンスを実行する必要があります。また、各インスタンスの物理メモリの使用を制限する必要もあります。

EnvironmentFile数十個のインスタンスを起動するためにテンプレート ユニット ファイルを使用しています。各インスタンスに異なる環境変数とコマンド ライン引数を指定するために使用しています。

ただし、インスタンスごとに異なるメモリ制限を指定できるようにもしたいと考えています。私の知る限り、環境変数の置換は、 などのリソース制限オプションでは機能しませんMemoryHigh

ドロップイン ファイルが答えだと思いましたが、インスタンス化されたサービスでドロップイン ファイルを使用する例を 1 つも見つけられませんでした。 用に 1 つのドロップイン ファイルを作成しmyservice@1、 用に別のドロップイン ファイルを作成するmyservice@2など、何か方法がありますか?

$ cat /etc/systemd/system/[email protected]

[Unit]
Description=Something
After=syslog.target network.target

[Service]
Type=forking    
EnvironmentFile=/etc/myservice/myservice.%i.env
ExecStart=/usr/bin/myservice $OPTIONS_FROM_ENV
MemoryHigh=4G

[Install]
WantedBy=multi-user.target

答え1

この回答で私が探していたものが見つかったと思います:https://serverfault.com/a/879705/62991

インスタンス名でドロップイン ディレクトリを作成するだけで、インスタンス化されていないサービスの場合と同様に、そこで設定をオーバーライドできます。

以下の例では、 のインスタンスはmyserviceデフォルトで 4GiB のメモリ制限を持ちますが、myservice@1と にはmyservice@2独自の設定があります。Fedora 25 の systemd 231 で正常に動作します。

$ cat /etc/systemd/system/[email protected]
[Unit]
Description=Something
After=syslog.target network.target

[Service]
Type=forking    
EnvironmentFile=/etc/myservice/myservice.%i.env
ExecStart=/usr/bin/myservice $OPTIONS_FROM_ENV
MemoryHigh=4G

[Install]
WantedBy=multi-user.target

$ cat /etc/systemd/system/[email protected]/99-memory.conf
[Service]
MemoryHigh=10G

$ cat /etc/systemd/system/[email protected]/99-memory.conf
[Service]
MemoryHigh=20G

関連情報