Процесс загрузки не учитывает ограничения на размер файла в 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     
....

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

1 ответ

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

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

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

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

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

Другие вопросы по тегам