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