Заставьте ulimits работать с start-stop-daemon

20

У меня есть init.dскрипт, который запускает приложение с помощью start-stop-daemon --chuid SOME_SYSTEM_USER. То есть приложение работает под другим пользователем, а не под пользователем root.

Проблема в том, что приложению нужны специальные настройки лимита (а именно ulimit -n 64000), которые я установил limits.conf. Это прекрасно работает, когда я запускаю его прямо из оболочки: su - SOME_SYSTEM_USER+ запускаю приложение из оболочки.

Но при запуске start-stop-daemon --chuidиз /etc/init.d, эти ограничения игнорируются. Тогда приложение не работает, очевидно.

Как мне заставить start-stop-daemonсоблюдать ulimitнастройки?


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

user124114
источник

Ответы:

23

В это время ты не можешь. limits.conf(5)является конфигурацией для pam_limits(8), которая активируется стеком PAM в соответствии с конфигурацией в /etc/pam.d. Однако start-stop-daemon(8)при запуске из скрипта init.d не проходит через стек PAM, поэтому такие настройки никогда не применяются.

Ошибка # 302079 в Debian содержит патч, с которого можно устанавливать ограничения start-stop-daemon(8), но эта ошибка была открыта с 2005 года, и патч еще не был объединен.

Хотя это и не идеально, AFAIK рекомендуемый способ сделать это прямо сейчас - добавить ulimitвызов в ваш скрипт init.d.

rtandy
источник
Просто добавьте ulimitнастройку прямо перед start-stop-daemonкомандой. (то есть ulimit -n 64000) ... для невежественных, как я.
Райан Шумахер
Если, в отличие от OP, вы не знаете, какой демон завершается сбоем, я только что получил хорошие результаты по перезапуску демонов Debian Wheezy после: echo "ulimit -c unlimited" | sudo tee /lib/lsb/init-functions.d/core-limit
Мартин Дори,
Некоторые более ценной справочной информации можно найти здесь: serverfault.com/a/642082/22394
sehe
7

Вы также можете использовать команду limit в сценарии upstart.

В файле /etc/init/foo.conf добавьте строку:

limit nofile 64000 64000

Первый 64000 - это мягкий предел, а второй - жесткий предел.

Вы можете найти больше информации здесь: http://upstart.ubuntu.com/cookbook/

dtynan
источник