Como especificar diferentes limites de recursos para diferentes instâncias de um serviço instanciado pelo systemd?

Como especificar diferentes limites de recursos para diferentes instâncias de um serviço instanciado pelo systemd?

Por motivos acima do meu nível de remuneração, preciso executar várias instâncias de um servidor de banco de dados em um host físico com um sistema operacional bare metal. Também preciso limitar o uso da memória física de cada instância.

Estou usando um arquivo de unidade de modelo para iniciar algumas dezenas de instâncias. Estou usando EnvironmentFilepara especificar diferentes variáveis ​​de ambiente e argumentos de linha de comando para cada instância.

No entanto, também quero poder especificar um limite de memória diferente para cada instância. AFAICT, a substituição de variável de ambiente não funciona para opções de limite de recursos como MemoryHigh.

Achei que arquivos drop-in seriam a resposta, mas não consegui um único exemplo de uso de arquivos drop-in com um serviço instanciado. Existe alguma maneira de criar um arquivo drop-in para myservice@1, um arquivo drop-in diferente para myservice@2, etc?

$ 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

Responder1

Acho que encontrei o que procuro nesta resposta:https://serverfault.com/a/879705/62991

Basta criar um diretório drop-in com o nome da instância e você poderá substituir as configurações lá, assim como faria para um serviço não instanciado.

No exemplo abaixo, as instâncias myservicetêm um limite de memória de 4GiB por padrão, mas myservice@1têm myservice@2suas próprias configurações. Funciona bem com o systemd 231 no 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

informação relacionada