답변:
GNU parallel는 이런 종류의 것에 완벽합니다. 설치 sudo apt install parallel후 다음을 수행하십시오.
parallel -j0 ::: my_folder/*sh
이 -j프로세스는 병렬로 실행되는 프로세스 수를 제어 -j0하며 "모든 프로세스 "를 의미합니다. -j20스크립트를 일괄 적으로 실행하려면 다른 값 (예 :)으로 설정하십시오 .
parallel명령 도 있습니다 moreutils. 예제 사용은 : parallel -j 20 -- my_folder/*.sh(GNU는 달리 parallel, -j0한 번에 스크립트를 실행하는 것입니다).
sudo apt install parallel파일 /usr/bin/parallel을 GNU 병렬 파일로 바꿉니다. 그래서 당신이 그것을 설치하는 한, 내 대답에서 알 수 있듯이 예상대로 작동합니다.
parallelGNU 병렬을 제안하는 대답을 쓰는 동안 설명서에서 명령을 성공적으로 시도하지 않을 때 어려운 방법을 발견했습니다 .
모든 스크립트를 동시에 (병렬로) 실행하려면 다음을 사용하십시오.
script_1.sh &
script_2.sh &
script_3.sh &
script_4.sh &
script_5.sh &
하나씩 순차적으로 실행하려면 다음을 사용하십시오.
script_1.sh &&
script_2.sh &&
script_3.sh &&
script_4.sh &&
script_5.sh
동시에 실행하려는 200 개의 스크립트가있는 경우 (시스템 BTW가 다운 될 수 있음)이 스크립트를 사용하십시오.
#!/bin/bash
for Script in my_folder/*.sh ; do
echo bash "$Script" &
done
다음 명령으로 스크립트 속성을 실행 가능으로 설정하십시오.
chmod a+x /path/to/script.sh
스크립트를 처음 실행하면 실행중인 200 개의 스크립트 이름 만 에코됩니다. 올바른 이름이 선택되면 스크립트를 편집하고 다음 줄을 변경하십시오.
echo bash "$Script" &
에:
bash "$Script" &
여기에 답변 된 것처럼 다른 스크립트에서 bash 스크립트를 호출하는 방법에는 세 가지가 있습니다.
다른 스크립트를 실행 가능하게 만들고
#!/bin/bash맨 위에 줄을 추가 하고 파일이$PATH환경 변수에 대한 경로를 추가하십시오 . 그런 다음 일반 명령으로 호출 할 수 있습니다.또는 다음과 같이 소스 명령 (별칭은.)으로 호출하십시오.
source /path/to/script;또는 bash 명령을 사용하여 실행하십시오.
/bin/bash /path/to/script;
OP의 경우 200 개 스크립트 중 하나 이상 #!/bin/bash이 파일에서 shebang 첫 번째 행을 포함하지 않았습니다 . 이러한 옵션으로 3.을 사용해야했습니다.
그들이 "동시에 실행하고 있는지"에 대한 의견이 제기되었습니다. 일반적인 8 CPU 시스템에서는 25 개의 스크립트가 동시에 하나의 CPU를 공유하지만 시간 조각 (밀리 초 단위로 측정)이 끝날 때까지 한 번에 하나의 스크립트 만 실행됩니다. 그런 다음 다음 작업은 밀리 초의 공정한 몫을 받고 다음 작업 등을 받게됩니다.
느슨한 용어로 우리는 200 개의 작업이 "동시"실행되고 있지만 8 개의 CPU에서 "동시"실행되지 않고 CPU 당 25 개의 작업과 동일하다고 말할 수 있습니다.
Linux 커널 스케줄러의 위 이미지 및 설명
bash스크립트 호출에 접두사를 포함하도록 답변을 업데이트했습니다 .
이를위한 도구가 있습니다 man run-parts.
예를 들어, 나는 :
run-parts ${visorhome}/pbackup.d/
Palm Pilot 백업 스크립트에서 ${visorhome}/pbackup.d/:
01PopulateJpilot 02Extract_Pedometer 03URLs 04google 05Books 06Weight 07Sec 08Bkgm 50hardlinks
run-partsOP가 요청 한대로 한 번에 스크립트가 아닌 순차적으로 스크립트 를 실행 한다는 언급을 여전히 원한다고 생각합니다 . 그러나 한 번에 200 개의 스크립트를 실행하는 것은 5를 실행하는 것과 동일하게 수행되지 않을 수 있으며 한 번에 모두 실행해도 아무런 문제가 발생하지 않아도 여전히 불필요 할 수 있습니다. 나는 한 주석 영업 이익이 점에서 자신의 환경 설정을 명확히 제시 할 수 있습니다.
run-parts스크립트를 실행하지 않습니다 (이름에 점이 있습니다 :my_folder/*.sh
다음을 사용하여 디렉토리에서 모든 *.sh스크립트 를 동시에 실행하려면 다음을 my_folder사용하십시오 xargs.
$ ls my_folder/*.sh | xargs -P0 -n1 bash
에 동시에 실행 스크립트의 수를 제한하려면 10:
$ ls my_folder/*.sh | xargs -P10 -n1 bash
ls스크립트에서 출력을 사용하는 것은 좋지 않습니다 . 사용하는 find것이 훨씬 안전합니다. 여기 첫 번째 항목입니다 : mywiki.wooledge.org/BashPitfalls#for_f_in_.24.28ls_.2A.mp3.29