如何为 systemd 实例化服务的不同实例指定不同的资源限制?

如何为 systemd 实例化服务的不同实例指定不同的资源限制?

由于超出我能力范围的原因,我需要在具有裸机操作系统的物理主机上运行多个数据库服务器实例。我还需要限制每个实例的物理内存使用量。

我正在使用模板单元文件来启动几十个实例。我用它EnvironmentFile来为每个实例指定不同的环境变量和命令行参数。

但是,我还希望能够为每个实例指定不同的内存限制。据我所知,环境变量替换不适用于资源限制选项,例如MemoryHigh

我以为插入式文件是答案,但我找不到一个将插入式文件与实例化服务结合使用的示例。我能否以某种方式为 创建一个插入式文件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@1myservice@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

相关内容