일련의 내부에서 실행되는 다른 스크립트를 포함하는 bash 스크립트가 있습니다. 그러나 모두 실행하려면 상당한 시간이 걸립니다. 전반적인 성능을 향상시키기 위해이 스크립트를 병렬로 실행하는 방법이 있습니까? 그들은 서로 독립적입니다.병렬 bash 스크립트로 여러 스크립트 실행하기
그것은과 유사합니다
이#!/bin/bash
#some code here
cppcheck.sh
churn.sh
run.sh
업데이트 :
**git log --pretty=format: --numstat | perl -ane'$c{$F[2]} += abs($F[0]+$F[1])
if $F[2];END {print "$_\t$c{$_}\n" for sort keys %c}' > ${OUTPUT_DIR}/churn.txt**
sed -i -e '/deps/d;/build/d;/translations/d;/tests/d' -e 30q ${OUTPUT_DIR}/churn.txt
sort -r -n -t$'\t' -k2 ${OUTPUT_DIR}/churn.txt -o ${OUTPUT_DIR}/churn.txt
echo "set term canvas size 1200, 800; set output '${OUTPUT_DIR}/output.html';
unset key; set bmargin at screen 0.4; set xtics rotate by -90 scale 0,0;
set ylabel 'Number of lines changed (total)'; set title 'Files with high churn
level';set boxwidth 0.7; set style fill solid; set noborder;
plot '${OUTPUT_DIR}/churn.txt' using 2:xticlabels(1) with boxes" | gnuplot
echo "finished running churn.sh!"
이 churn.sh 내부의 코드입니다. 대담한 명령은 40 초 정도 걸립니다. 주 스크립트에서 churn.sh & 다음에 앰퍼샌드를 넣으면 sed가 churn.txt 파일을 읽을 수 없다는 오류가 발생합니다 (아직 생성되지 않았으므로). 출력이 파일에 저장 될 때까지 기다리지 않는 것 같습니다. 그 명령 다음에 대기를 삽입했지만 도움이되지 않습니다. 트릭을
cppcheck.sh &
churn.sh &
run.sh &
wait
echo "All 3 complete"
그것은 그들 각각에 대해 새로운 프로세스를 포크 뜻을 행하려 백그라운드에서 실행하는 &
를 사용
또한 '대기'를 호출하면 모든 백그라운드 작업이 완료 될 때까지 부모 스크립트가 종료되지 않습니다. –
@DarkCthulhu 이미 사용했습니다. 문제는 다음과 같습니다. 한 줄은 --numstat을 사용하여 git에서 데이터를 가져와 일부 파일로 출력합니다. 이 파일은 다음 줄에서 사용되지만, & command가 줄을 실행하고 다음 줄로 건너 뛰기 때문에 다음 줄은 'file does not exist'라는 오류를 발생시킵니다. txt 파일에 저장하십시오. 모든 스크립트 파일에서 거의 비슷한 문제입니다. – Bdar
@ Bdar 방금 스크립트가 서로 독립적이라고했습니다. 실행 사이에 약간의 시간을 추가하고 싶다면'sleep n && churn.sh &'를 시도해보십시오. 그렇지 않으면 순서대로 실행하는 것이 좋습니다. –