Да, я знаю, что этот вопрос задавался раньше, и я пробовал все решения, которые видел, и ни одно из них не работает для меня. Мы работаем в Ubuntu 12, и у нас есть процесс, который автоматически запускается выскочкой при каждой загрузке машины. Я зашел в /etc/security/limits.conf и добавил эти строки:
* hard nofile 65000
* soft nofile 32000
root hard nofile 65000
root soft nofile 32000
Я также зашел в /etc/pam.d/common-session и добавил эту строку:
session required pam_limits.so
Чтобы это работало для неинтерактивных процессов, я также зашел в /etc/pam.d/common-session-noninteractive и добавил ту же строку.
Когда я вхожу в систему как пользователь-администратор (который находится в списке sudo, я назову этого пользователя SUDOUSER), я вижу, что ограничения теперь равны 32000, как и ожидалось, когда я выполняю ulimit -a.
Затем я перезагружаю всю машину, чтобы убедиться, что ограничения сохраняются для новых процессов, таких как процесс, который запускается выскочкой после перезагрузки.
Однако после перезагрузки, когда я смотрю на постоянный процесс, который запускается во время выполнения, я получаю идентификатор процесса (скажем, 12345), а затем выполняю cat / proc / 12345 / limits и вижу, что ограничения по-прежнему являются значениями по умолчанию (1024 soft, 4096 хард).
Так что я делаю не так?
Хорошо, я нашел решение. Оказывается, выскочка игнорирует все ограничения в pam.d и limits.conf. Способ сделать это в выскочке - явно установить ограничения в сценарии конфигурирования выскочки для процесса. Итак, предположим, что это процесс myproc, и у вас есть файл /etc/init/myconf.conf. Внутри этого скрипта просто включите эту строку где-нибудь в верхней части:
limit nofile 32000 65000
Убедитесь, что эта строка стоит сама по себе - она НЕ помещается внутри сценария, предварительного сценария и т.д. - это основная строка (или «строфа») сама по себе.
Теперь просто перезапустите процесс и посмотрите ограничения с помощью cat / proc / 12345 / limits.