2016-12-25 16 views
4

컴퓨터 클러스터에서 프로세스를 실행해야합니다. 클러스터의 크기는 100입니다. 그래서 수동으로 프로세스를 실행할 수 없습니다. 스크립트로 실행해야합니다 (ssh를 사용합니다. 현재는 python-paramiko를 사용하고 있습니다). 이 프로세스가 열리는 tcp 소켓의 수는 1024 개가 넘습니다 (Linux의 기본 제한). 따라서 {ulimit -n 10000}을 사용하여 변경해야합니다. 그러면 해당 셸 세션에 대해서만 변경됩니다. 이 명령은 루트 사용자와 만 작동합니다. 그래서 내 대본은 그렇게 할 수 없다. 나는이 명령리눅스 : 프로세스가 열 수있는 최대 파일 수를 변경하는 방법은 무엇입니까?

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

을 실행하려고하지만이 작동하지 않았다. "sudo su"이후의 명령은 전혀 실행되지 않았습니다. 그들은 su 세션을 로그 아웃 할 때만 실행됩니다. This 문서는 변경 사항을 영구히 적용하는 방법을 보여줍니다. 그러나 limits.conf를 열면 아무 것도 찾지 못했습니다. 주석이 달린 메모 만 있습니다.

각 세션마다 한도를 영구히 늘리거나 스크립트로 변경하는 방법을 제안 해주세요.

+1

스택 오버플로는 프로그래밍 및 개발 관련 질문에 대한 사이트입니다. 이 질문은 프로그래밍이나 개발에 관한 것이 아니기 때문에 주제와는 거리가 먼 것처럼 보입니다. 도움말 센터에서 [여기에서 내가 질문 할 수있는 항목은 무엇입니까?] (http://stackoverflow.com/help/on-topic)를 참조하십시오. 아마도 [Super User] (http://superuser.com/) 나 [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/)가 더 나은 곳이 될 것입니다. 또한 [Dev Ops에 관한 질문은 어디에 게시합니까?] (http://meta.stackexchange.com/q/134306)를 참조하십시오. – jww

답변

1

그것은 작동 방식이 아닙니다. sudo su은 새 셸을 열어 명령을 소개 할 수 있으며, 셸을 종료 한 후 일반 사용자로 나머지 줄을 실행합니다.

둘째 : 당신의 ulimit 실제로 프로그램이 아니라 bash 쉘 내장 명령, 그래서 떠들썩한 파티 내에서 사용되어야하기 때문에이 sudo ulimit -n 10000 같은 작동하지 않습니다 이유는, 특별한 경우 : sudo 수 존재하지 않기 때문에 해당 프로그램을 찾을 수 없습니다.

그래서, 유일한 대안은 약간 못생긴지만 작동 : '...' 내부

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

모든 루트 사용자의 떠들썩한 세션에서 실행됩니다.

이 경우 &&;으로 바꿀 수 있습니다. 이는 루트로 실행되고 ulimit -n 10000이 항상 성공적으로 완료되기 때문입니다.