Make ulimits work with start-stop-daemon

20

8

I have an init.d script that starts an app using start-stop-daemon --chuid SOME_SYSTEM_USER. That is, the app runs under a different user, not root.

Problem is, the app needs special limit settings (namely ulimit -n 64000), which I set in limits.conf. This works quite nicely when I run it directly from shell: su - SOME_SYSTEM_USER + start app from shell.

But when run through the start-stop-daemon --chuid from /etc/init.d, these limits are ignored. Then the app fails to work, obviously.

How do I force start-stop-daemon to honour the ulimit settings?


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

user124114

Posted 2012-07-27T17:27:03.270

Reputation: 473

Answers

23

At this time, you can't. limits.conf(5) is the configuration for pam_limits(8), which is activated by the PAM stack according to the configuration in /etc/pam.d. However, start-stop-daemon(8) as launched from an init.d script doesn't pass through the PAM stack, so those kinds of settings are never applied.

Debian bug #302079 contains a patch to enable setting limits from start-stop-daemon(8), but the bug has been open since 2005 and the patch hasn't been merged yet.

While not ideal, AFAIK the recommended way to accomplish this right now is to add a ulimit call in your init.d script.

rtandy

Posted 2012-07-27T17:27:03.270

Reputation: 371

If, unlike the OP, you don't know which daemon's crashing, I just got good results on Debian Wheezy restarting daemons after: echo "ulimit -c unlimited" | sudo tee /lib/lsb/init-functions.d/core-limit – Martin Dorey – 2015-07-07T18:59:17.893

Some more valuable background information can be found here: http://serverfault.com/a/642082/22394

– sehe – 2016-05-24T11:40:46.553

Just add the ulimit setting right before the start-stop-daemon command. (i.e ulimit -n 64000) ... for the ignorant like me. – Ryan Schumacher – 2013-11-04T01:07:36.863

7

You can also use the 'limit' command in the upstart script.

In the file /etc/init/foo.conf, add the line:

limit nofile 64000 64000

The first 64000 is the soft limit, and the second is the hard limit.

You can find more information here: http://upstart.ubuntu.com/cookbook/

dtynan

Posted 2012-07-27T17:27:03.270

Reputation: 71