Процесс загрузки не учитывает ограничения на размер файла в 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 и изменить пределы. Я не знаю. Расскажи нам!