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