Faire fonctionner les ulimits avec start-stop-daemon

20

J'ai un init.dscript qui démarre une application en utilisant start-stop-daemon --chuid SOME_SYSTEM_USER. Autrement dit, l'application s'exécute sous un autre utilisateur, pas root.

Le problème est que l'application a besoin de paramètres de limite spéciaux (à savoir ulimit -n 64000), que j'ai définis limits.conf. Cela fonctionne très bien lorsque je l'exécute directement à partir du shell: su - SOME_SYSTEM_USER+ démarrer l'application à partir du shell.

Mais lors de l'exécution à start-stop-daemon --chuidpartir de /etc/init.d, ces limites sont ignorées. Ensuite, l'application ne fonctionne pas, évidemment.

Comment forcer start-stop-daemonà honorer les ulimitparamètres?


Debian Squeeze, 2.6.32-5-686 # 1 SMP sam 5 mai 01:33:08 UTC 2012 i686 GNU / Linux

user124114
la source

Réponses:

23

Pour le moment, vous ne pouvez pas. limits.conf(5)est la configuration de pam_limits(8), qui est activée par la pile PAM en fonction de la configuration dans /etc/pam.d. Cependant, start-stop-daemon(8)comme lancé à partir d'un script init.d ne passe pas par la pile PAM, ces types de paramètres ne sont jamais appliqués.

Le bogue Debian # 302079 contient un correctif permettant d'activer la définition de limites start-stop-daemon(8), mais le bogue est ouvert depuis 2005 et le correctif n'a pas encore été fusionné.

Bien que ce ne soit pas idéal, AFAIK la manière recommandée pour y parvenir est d'ajouter un ulimitappel dans votre script init.d.

rtandy
la source
Ajoutez simplement le ulimitparamètre juste avant la start-stop-daemoncommande. (c'est-à-dire ulimit -n 64000) ... pour les ignorants comme moi.
Ryan Schumacher
Si, contrairement à l'OP, vous ne savez pas quel démon plante, je viens d'obtenir de bons résultats sur le redémarrage des démons par Debian Wheezy après: echo "ulimit -c unlimited" | sudo tee /lib/lsb/init-functions.d/core-limit
Martin Dorey
Quelques informations de base plus précieux se trouve ici: serverfault.com/a/642082/22394
sehe
7

Vous pouvez également utiliser la commande «limit» dans le script upstart.

Dans le fichier /etc/init/foo.conf, ajoutez la ligne:

limit nofile 64000 64000

Le premier 64000 est la limite souple, et le second est la limite dure.

Vous pouvez trouver plus d'informations ici: http://upstart.ubuntu.com/cookbook/

dtynan
la source