Назад | Перейти на главную страницу

Процесс загрузки не соблюдает конфигурацию ограничений файлов в Ubuntu Linux

У меня настроен лимит открытых файлов в /etc/security/limits.conf

*         hard    nofile      500000
*         soft    nofile      500000
root      hard    nofile      500000
root      soft    nofile      500000

Когда я запускаю процесс из оболочки, он работает нормально.

Но есть один процесс, который запускается при загрузке сервера.

# update-rc.d myprocess defaults 99

# cat /proc/1435/limits 
Limit                     Soft Limit           Hard Limit           Units     
....
Max open files            4096                 4096                 files     
....

Почему это происходит?

ответ: попробуйте "man limits.conf" Это часть PAM: подключаемые модули аутентификации

Эти ограничения применимы только при использовании программы, созданной для использования PAM, обычно выполняющей аутентификацию (например, login, su, sudo, ssh, ...). Когда вы входите в систему как root (через login, su, sudo, ...), вы аутентифицируетесь, поэтому ваша система использует различные настройки PAM, включая limits.conf.

Когда система загружается, аутентификация не выполняется, поэтому никакая конфигурация PAM никогда не читается. Ваш демон будет использовать настройки по умолчанию. Если позже вы (повторно) запустите его из root (например, используя sudo su - в Ubuntu), ваша текущая оболочка получит настройки limits.conf, и все, что она запускает, также унаследует их.

возможные решения: поскольку root в любом случае может переопределить ограничения, вам следует вместо этого изменить настройки в сценарии запуска вашего демона (ов). Например, с ulimit (поиск внутри "man bash")

Вы также можете попробовать использовать такую ​​конструкцию: su - -c 'daemon ... = myprocess' в своем сценарии запуска. Возможно, этот дополнительный su будет использовать PAM и изменит лимиты. Я не знаю. Скажи нам!