2016-12-25 23 views
4

Мне нужно выполнить процесс на кластере машин. Размер кластера порядка 100. Поэтому я не могу выполнять процессы вручную, я должен выполнить их по сценарию (который использует ssh, в настоящее время я использую для этого python-paramiko). Количество сокетов tcp, открытых этими процессами, больше 1024 (ограничение по умолчанию для Linux). Поэтому мне нужно изменить это с помощью {ulimit -n 10000}. Это делает изменения только для этого сеанса оболочки. И эта команда работает только с пользователем root. Поэтому мой сценарий не в состоянии это сделать. Я пытался выполнить эту командуLinux: как изменить максимальное количество файлов, которые может открыть процесс?

sudo su && ulimit -n 10000 && <commandToExecuteMyProcess> 

Но это не сработало. Команды после «sudo su» вообще не выполнялись. Они выполняются только при выходе из сеанса su. This статья показывает способ внесения изменений навсегда. Но когда я открываю limit.conf, я ничего там не нашел. В нем есть только некоторые примечания.

Просьба предложить мне способ увеличить лимит на постоянной основе или изменить его по сценарию для каждой сессии.

+1

Stack Overflow - это сайт для вопросов программирования и разработки. Этот вопрос кажется вне темы, потому что речь идет не о программировании или разработке. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше сказать [Суперпользователь] (http://superuser.com/) или [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). Также см. [Где я пишу вопросы о Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

ответ

1

Это не то, как это работает: sudo su просто открывает новую оболочку, поэтому вы можете вводить команды как root, а после выхода из этой оболочки она выполняет остальную часть строки как обычный пользователь.

Во-вторых, ваш это особый случай, потому что ulimit это на самом деле не программа, а Баш оболочки встроенной команды, поэтому он должен быть использован в течение Баш, поэтому что-то вроде sudo ulimit -n 10000 не будет работать: sudo может Не находите эту программу, потому что ее не существует.

Таким образом, единственной альтернативой является немного некрасиво, но работает:

sudo bash -c 'ulimit -n 10000 && <command>' 

Все внутри '...' будет выполняться в Баш сессии суперпользователя.

Обратите внимание, что в этом случае вы можете заменить && на ;: это потому, что он выполняется от имени root, а ulimit -n 10000 всегда будет успешно завершен.