ulimit PICKLE: "Операція не дозволена" та "Команда не знайдена"


15

Я намагаюся збільшити максимальну кількість відкритих файлів для поточного користувача

> ulimit -n
1024

Я намагаюсь збільшити та провалитись так

> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted

Тож я роблю природне і намагаюся запустити з тимчасового дозволу, але не вдається

> sudo ulimit -n 4096
sudo: ulimit: command not found

Запитання

  1. Як збільшити уліміт?
  2. Чому це відбувається?

Використання Fedora 14


Відповідь на видалений коментар: ulimit 4096не працює. Я думаю, що -nце правильно. Як доказ концепції, це працює, якщо я спочатку sudo su - root(але лише для кореневих змін).
paislee


Відповіді:


17

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

підняти м'яку межу до жорсткої межі.


1
Альтернативи тому sudo bash -c, sudo -iщо починає оболонку входу, а хто sudo -sпочинає оболонку. Діють ті самі обмеження, але це може бути корисно за інших обставин.
Брам

Спасибі. Чи можу я задати відповідні запитання? Інший відповідь і пост stackoverflow.com/a/17483998/156458 і unix.stackexchange.com/a/238413/674 і unix.stackexchange.com/a/169035/674 все рекомендується використовувати sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Але і те, ulimit -c 1024і exec su $LOGNAME" лише впливає на створену командою оболонку sudo, тож яка мета команди? exec su $LOGNAME"також не робить нічого значимого для використання зміненого ліміту. Я дуже розгублений і цікавлюсь, чи щось мені не вистачає.
Тім

Зверніть увагу, що ulimit -Sn unlimitedце не працює на більшості снарядів. Правильний метод - зателефонувати, ulimit -aа потім зателефонувати ulimit -n <number>де <число - жорсткий межа (правий стовпець).
schily

3

відкрийте файл /etc/security/limits.confі додайте рядок <user> soft nofile <value>. для використання ulimitзмін до користувача root і спробуйте те ж саме.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.