병렬: 경고: 더 이상 파일 핸들이 없습니다.

병렬: 경고: 더 이상 파일 핸들이 없습니다.

나는 GNU 병렬을 실행하고 있으며 얼마 후 다음과 같은 결과를 얻습니다.

parallel: Warning: no more file handles Raising ulimit -n or etc/security/limits.conf may help.

이 문제를 극복하려면 병렬 명령에 어떤 매개변수를 추가해야 합니까?

limits.conf으로 변경했지만 상자를 사용하거나 로그인 unlimited할 수 없습니다 . 같은 문제가 발생했습니다. 예:sudorootssh여기

다음은 제가 사용하고 있는 코드 조각입니다. 2개의 파일이 있습니다. 첫 번째 파일은 비밀번호이고 두 번째 파일은 호스트입니다.

passPasswords_and_hosts() {
        `sudo sshpass -p "$1" ssh -o ConnectTimeout=2 root@"$2" -o StrictHostKeyChecking=no "$command_linux"`
}
export -f testone
export -p command_linux
parallel --tag -k passPasswords_and_hosts :::: "$passwords" "$linux_hosts"

답변1

비정상적인 종료(생각 또는 시스템 충돌) 후에 tmp 파일이 남아 있는 것을 방지하기 위해 kill -9GNU Parallel은 tmp 파일을 열고 즉시 삭제합니다. 하지만 파일은 계속 열려 있습니다.

요구 사항을 충족하려면 --keep-order아직 인쇄되지 않은 모든 파일을 열어 두어야 합니다. 따라서 1000000개의 명령이 있고 명령 2가 영원히 중단되면 GNU Parallel은 명령 3 이상을 문제없이 실행하지만 명령 2가 중단되지 않으면 GNU Parallel은 결국 파일 핸들이 부족해집니다(각 명령은 4개의 파일을 사용합니다). 핸들). 일하다).

귀하의 경우에는 passPasswords_and_hosts아마도 어느 시점에서 막히게 될 것입니다. 출력에는 마지막 출력 이후의 작업(즉, 아직 인쇄되지 않은 작업)이 됩니다.

따라서 작업을 수동으로 실행해보고 몇 가지 명백한 문제가 있는지 확인하십시오.

을 삭제할 수도 있습니다 -k. 그러면 중단된 작업은 계속해서 4개의 파일 핸들을 사용하지만 이후에 완료된 모든 작업은 완료 후에 인쇄되므로 사용하지 않습니다.

드디어 사용할 준비가 되었습니다 --timeout. 저는 보통 을 사용합니다 --timeout 1000%. 이는 작업이 10배 이상 오래 걸리는 경우를 의미합니다.중앙값성공적인 모든 작업이 종료되기 전의 런타임입니다. 다양한 상황에서 작동합니다.

관련 정보