3

Это очень странно. Я пытаюсь установить ulimit на 60000 через мой startup.sh:

#!/bin/bash

ulimit -n 60000
echo "Hello! File Descriptor set"

Я могу выполнить это с ./startup.sh (755 прав доступа к файлу), и выводится строка эха, а ошибки не отображаются. Однако, когда я делаю ulimit -n он все еще показывает 1024 , что происходит?

Что меня также привлекает, так это то, что я могу набрать в терминале ulimit -n 60000 , а затем сделать ulimit -n и он отлично работает. Почему я не могу установить ограничение дескриптора файла через скрипт?

Debian 8, 64-битный OpenVZ Контейнер

1 ответ1

3

Ограничения для каждого процесса, а не для пользователя или системы.

Команда ulimit встроена в оболочку, поэтому она остается в том же процессе; однако скорректированное ограничение влияет только на этот процесс, а также на все, что вы из него запускаете (дочерние процессы наследуют те же ограничения).

Тем не менее, ./startup.sh запускается как отдельный процесс - поэтому он успешно настраивает свои собственные пределы, но это волшебным образом не распространяется вверх до его родителя.

(Это та же самая ситуация, что и для cd или `export - хотя вы можете использовать их в скрипте, они все изменяют параметры самого процесса скрипта, а не всей системы, и будут забыты после выхода из процесса скрипта.)

Примечание: есть другая команда prlimit , которая позволяет вам настроить ограничения ресурсов другого процесса (заданного PID). Сценарий может изменить ограничение файла своего родительского процесса следующим образом:

prlimit --pid=$PPID --nofile=4096

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .