Как указать различные ограничения ресурсов для различных экземпляров службы, созданной с помощью systemd?

Как указать различные ограничения ресурсов для различных экземпляров службы, созданной с помощью systemd?

По причинам, не входящим в мою компетенцию, мне необходимо запустить несколько экземпляров сервера БД на физическом хосте с ОС bare metal. Мне также необходимо ограничить использование физической памяти каждым экземпляром.

Я использую файл шаблона unit для запуска нескольких десятков экземпляров. Я использую EnvironmentFileдля указания различных переменных среды и аргументов командной строки для каждого экземпляра.

Однако я также хочу иметь возможность указать разный лимит памяти для каждого экземпляра. Насколько мне известно, подстановка переменных среды не работает для таких параметров ограничения ресурсов, как MemoryHigh.

Я думал, что drop-in files будут ответом, но я не смог найти ни одного примера использования drop-in files с инстанцированной службой. Есть ли способ создать один drop-in file для myservice@1, другой drop-in file для 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имеют свои собственные настройки. Работает отлично с systemd 231 в Fedora 25.

$ 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

Связанный контент