여러 bash 스크립트를 호출하고 순차적이 아닌 병렬로 실행

여러 bash 스크립트를 호출하고 순차적이 아닌 병렬로 실행

script1.sh, script2.sh및 3개(또는 그 이상)의 bash 스크립트가 있다고 가정해 보겠습니다 script3.sh. 세 가지 스크립트를 모두 호출하여 실행하고 싶습니다.평행선. 한 가지 방법은 다음 명령을 실행하는 것입니다.

nohup bash script1.sh &
nohup bash script2.sh &
nohup bash script3.sh &

nohup(일반적으로 스크립트를 완료하는 데 몇 시간 또는 며칠이 걸릴 수 있으므로 콘솔을 닫아도 계속 실행되도록 스크립트를 사용하고 싶습니다 .)

그런데 이 세 가지 명령을 실행할 수 있는 방법이 없을까요?평행선하나의부르다?

나는 다음과 같은 것을 생각하고 있었다

nohup bash script{1..3}.sh &

그런데 이것은 병렬이 아닌 순차적으로 script1.sh, script2.sh, 를 실행하는 것 같습니다 .script3.sh

답변1

for((i=1;i<100;i++)); do nohup bash script${i}.sh & done

답변2

더 좋은 방법은 다음을 사용하는 것입니다.GNU 병렬. GNU 병렬화는 간단합니다. 이를 통해 병렬로 실행되는 작업 수를 제어하고 작업을 더 많이 제어할 수 있습니다.

다음 명령에서는 script{1..3}.sh가 확장되어 병렬로 매개변수로 전송됩니다 bash. 이는 -j0가능한 한 많은 작업을 실행해야 함을 의미합니다. 기본적으로 parallel하나의 CPU 코어는 하나의 작업을 실행합니다.

$ parallel -j0 bash :::: <(ls script{1..3}.sh)

다음을 사용해 볼 수도 있습니다.

$ parallel -j0 bash ::: script{1..3}.sh

두 번째 방법을 수행하는 동안 오류 메시지가 나타나면 --tollef옵션이 설정되어 /etc/parallel/config제거되어야 하며 모든 것이 제대로 작동한다는 의미입니다.

GNU Parallels맨 페이지를 읽을 수 있습니다여기더 풍부한 선택을 위해.

원격 시스템에서 작업을 실행하는 경우 다음을 사용하는 것이 좋습니다.screen네트워크 문제로 인해 세션이 종료되지 않도록 합니다. 최신 버전의 bash에는 as 가 함께 nohup제공되므로 필요하지 않습니다 . 이는 종료 중에 상위 쉘이 하위 쉘에 신호를 보내는 것을 방지합니다 . 설정이 해제되지 않으면 다음을 수행하세요.huponexitoffHUP

$ shopt -u huponexit  

답변3

또한 이를 사용하여 xargs여러 스크립트를 병렬로 실행할 수도 있습니다.

$ ls script{1..5}.sh|xargs -n 1 -P 0 bash

여기서 각 스크립트는 개별적으로 매개변수로 bash에 전달됩니다. -P 0병렬 프로세스 수가 가능한 한 많을 수 있음을 나타냅니다. bash default 를 사용하는 것이 더 안전합니다 job control feature (&).

답변4

타이핑 작업을 절약하고 싶다면

eval "nohup bash "script{1..3}.sh" &"

아니면 다시 생각해 보면 아닐 수도 있습니다.

관련 정보