Назад | Перейти на главную страницу

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

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

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

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

Я думал, что добавляемые файлы будут ответом, но я не смог ни одного примера использования drop-in файлов с созданной службой. Есть ли способ создать один подключаемый файл для myservice@1, другой вспомогательный файл для myservice@2, и т.д?

$ cat /etc/systemd/system/myservice@.service

[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

Думаю, в этом ответе я нашел то, что ищу: https://serverfault.com/a/879705/62991

Просто создайте подключаемый каталог с именем экземпляра, и вы можете переопределить настройки в нем так же, как и для неинстанциализированной службы.

В приведенном ниже примере экземпляры myservice по умолчанию имеют ограничение памяти в 4 ГБ, но myservice@1 и myservice@2 имеют свои настройки. Прекрасно работает с systemd 231 в Fedora 25.

$ cat /etc/systemd/system/myservice@.service
[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/myservice@1.service.d/99-memory.conf
[Service]
MemoryHigh=10G

$ cat /etc/systemd/system/myservice@2.service.d/99-memory.conf
[Service]
MemoryHigh=20G