
По причинам, не входящим в мою компетенцию, мне необходимо запустить несколько экземпляров сервера БД на физическом хосте с ОС 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