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
제공되므로 필요하지 않습니다 . 이는 종료 중에 상위 쉘이 하위 쉘에 신호를 보내는 것을 방지합니다 . 설정이 해제되지 않으면 다음을 수행하세요.huponexit
off
HUP
$ 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" &"
아니면 다시 생각해 보면 아닐 수도 있습니다.