Faça o ulimits funcionar com o start-stop-daemon

20

Eu tenho um init.dscript que inicia um aplicativo usando start-stop-daemon --chuid SOME_SYSTEM_USER. Ou seja, o aplicativo é executado sob um usuário diferente, não raiz.

O problema é que o aplicativo precisa de configurações especiais de limite (a saber ulimit -n 64000), que eu defini limits.conf. Isso funciona muito bem quando eu o executo diretamente do shell: su - SOME_SYSTEM_USER+ start app from shell.

Mas quando executados através do start-stop-daemon --chuidfrom /etc/init.d, esses limites são ignorados. Então o aplicativo não funciona, obviamente.

Como forço start-stop-daemona respeitar as ulimitconfigurações?


Debian Squeeze, 2.6.32-5-686 # 1 SMP Sáb 5 de maio 01:33:08 UTC 2012 i686 GNU / Linux

user124114
fonte

Respostas:

23

Neste momento, você não pode. limits.conf(5)é a configuração para pam_limits(8), que é ativada pela pilha PAM de acordo com a configuração em /etc/pam.d. No entanto, start-stop-daemon(8)quando iniciado a partir de um script init.d não passa pela pilha do PAM, esse tipo de configuração nunca é aplicado.

O bug Debian # 302079 contém um patch para permitir a configuração de limites start-stop-daemon(8), mas o bug está aberto desde 2005 e o patch ainda não foi mesclado.

Embora não seja o ideal, o AFAIK, a maneira recomendada de fazer isso agora, é adicionar uma ulimitchamada no seu script init.d.

rtandy
fonte
Basta adicionar a ulimitconfiguração logo antes do start-stop-daemoncomando. (ie ulimit -n 64000) ... para os ignorantes como eu.
Ryan Schumacher
Se, diferentemente do OP, você não sabe qual daemon está travando, obtive bons resultados no Debian Wheezy reiniciando daemons após: echo "ulimit -c unlimited" | sudo tee /lib/lsb/init-functions.d/core-limit
Martin Dorey
Algumas informações de fundo mais valiosas podem ser encontradas aqui: serverfault.com/a/642082/22394
sehe
7

Você também pode usar o comando 'limit' no script inicial.

No arquivo /etc/init/foo.conf, adicione a linha:

limit nofile 64000 64000

O primeiro 64000 é o limite flexível e o segundo é o limite rígido.

Você pode encontrar mais informações aqui: http://upstart.ubuntu.com/cookbook/

dtynan
fonte