21

У меня есть сценарий 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

2 ответа2

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.

7

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

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

limit nofile 64000 64000

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .