Os processos nos cgroups precisam ser configurados a cada inicialização? Se sim, como persistir?

9

Eu estava lendo esta resposta para uma pergunta sobre como definir limites para processos usando cgroups. A amostra fornecida define limites para um processo (no exemplo sshd). Na resposta, o PID do processo é definido manualmente. Isso seria inaceitável para meus propósitos, eu gostaria que os processos iniciados a partir de um determinado aplicativo tivessem sempre os limites definidos, independentemente de quando eles forem iniciados ou limitados pelo número de processos iniciados.

Talvez não esteja claro a partir do exemplo como isso aconteceria, portanto uma explicação clara ou um link para um também seria bem-vindo. O exemplo no kernel cgroups.txt parece usar o mesmo modelo que já foi dado acima .

casualunixer
fonte

Respostas:

6

A maneira mais fácil é usar o systemdque pode ser responsável pelo seu, de sshdqualquer maneira (dependendo da distribuição). Você pode configurar facilmente os limites no sshdarquivo da unidade. systemdcoloca todos os serviços em cgroups separados de qualquer maneira.

Sem systemda solução mais fácil, provavelmente é uma modificação no sshdscript de início (preste atenção para que ele não seja sobrescrito por uma atualização; pode ser uma boa ideia copiá-lo para um nome diferente e desativar o script original).

Hauke ​​Laging
fonte
Existe um aplicativo problemático em que limites seriam ótimos de limpar, que não são sshd. É apenas que o sshd foi usado no exemplo. Presumivelmente, você pode aplicar cgroups a qualquer processo. Um script pode acabar sendo a solução mais fácil. Parecia que cgroups teria sido uma boa resposta, no entanto.
casualunixer
@casualunixer Você só precisa escrever um arquivo de unidade para o seu aplicativo. Você pode configurar para que seja inicializado automaticamente na inicialização ou apenas manualmente.
Hauke ​​Laging 01/03/19
@laging, se você pudesse dar um exemplo de arquivo de unidade em uma resposta ou apontar para documentação a um similar, isso seria apreciado.
Casualunixer
@casualunixer É exatamente onde se espera: man systemdleva a man 5 systemd.unitleads man 5 systemd.service. No meu sistema, o arquivo SSH é /usr/lib/systemd/system/sshd.service.
Hauke ​​Laging
Ah, como eu não tenho o systemd instalado, mesmo que esse seja o tópico desta resposta, isso não foi imediatamente óbvio.
Casualunixer 13/05