ulimit
это встроенная оболочка, а не внешняя команда. Его нужно встроить, потому что он действует на сам процесс оболочки, например cd
: ограничения, как и текущий каталог, являются свойством этого конкретного процесса.
sudo bash -c 'ulimit -n 4096'
будет работать, но это изменит ограничение для процесса bash, вызываемого sudo
только, что не поможет вам.
Есть два значения для каждого предела: жесткий предел и мягкий предел. Только root может поднять жесткий лимит; любой может снизить жесткий предел, и мягкий предел может быть изменен в любом направлении с единственным ограничением, которое не может быть выше жесткого ограничения. Мягкий предел - это фактическое значение, которое имеет значение.
Поэтому вам нужно организовать, чтобы все ваши процессы имели жесткое ограничение на количество открытых файлов не менее 4096. Можно установить мягкое ограничение на 1024. Прежде чем запускать этот процесс, требующий большого количества файлов, увеличьте мягкое ограничение. В /etc/security/limits.conf
добавьте строки
paislee hard nofile 4096
paislee soft nofile 1024
где paislee
имя пользователя, от имени которого вы хотите запустить процесс. В оболочке, которая запускает процесс, для которого вы хотите более высокий предел, запустите
ulimit -Sn unlimited
поднять мягкий предел до жесткого ограничения.
ulimit 4096
не работает. Я думаю, что-n
это правильно. В качестве доказательства концепции это работает, если я сначалаsudo su - root
(но только изменения для корня).