셸 스크립트 내에서 명령의 동시 인스턴스 실행

셸 스크립트 내에서 명령의 동시 인스턴스 실행

저는 아직 bash 스크립팅을 배우고 있고 모르는 것이 많다는 점을 말씀드리면서 시작하겠습니다. 제가 놓친 부분이 있으면 마음껏 꾸짖어 주세요.

앞으로는 2개의 다른 호스트에 ping을 실행하고 파일로 출력하는 간단한 bash 스크립트를 만들고 있습니다. 나는 이미 그 내용을 다뤘고 효과가 있습니다. 호기심에 핑 출력 인쇄 전후 날짜를 출력하도록 스크립트에 추가했기 때문에 핑을 실행하는 데 시간이 얼마나 걸렸는지 알 수 있습니다. 핑을 1초 간격, 핑 10개, 호스트 2개로 설정했습니다. 내 첫 데이트(오래 전...)의 시간 스탬프는 14:36:20이었습니다. 두 번째 날짜(핑 이후)의 시간 스탬프는 14:36:40이었습니다.

따라서 날짜는 두 핑이 모두 완료될 때까지 기다렸습니다. 이는 핑이 순차적으로 실행되었음을 의미합니다.

동시에 실행되도록 하여 스크립트를 실행하는 데 20초가 아닌 10초를 소비할 수 있습니까?

내 스크립트의 일부는 다음과 같습니다.

date >> teste.txt
cat hosts.txt |  while read output
do   ping -c 10 -i 1 "$output" >> teste.txt
done
date >> teste.txt

이 스크립트를 통해 수행할 다른 작업이 여러 가지 있지만 Barsa에서 만족스러운 답변을 찾을 수 없는 경우에만 물어볼 것을 약속합니다.

PS: 호스트.txt는 핑하려는 호스트를 저장하는 곳입니다.

답변1

귀하의 질문 문구는 이해하기가 약간 어렵지만 다음과 같은 것을 찾고 있다고 생각합니다.

command & 
command &
wait

스크립트는 백그라운드에서 두 명령을 실행하고 응답을 기다립니다.

그러나 귀하의 경우 경쟁 조건에 주의해야 합니다. 아마도 개별 명령의 출력을 임시 파일로 보낸 다음 이를 기본 파일로 분류하여 다음과 같이 할 수 있습니다.

command > "${tmp1}" & 
command > "${tmp2}" & 
wait
cat "${tmp1}" "${tmp2}" >> "${main}"
rm -f "${tmp1}" "${tmp2}"

업데이트: xargs를 시도해 볼 수 있습니다(예:https://stackoverflow.com/questions/15755422/linux-bash-script-to-ping-multiple-hosts-simultaneously)

답변2

GNU Parallel을 사용하면 다음과 같은 작업을 수행할 수 있습니다.

date >> teste.txt
cat hosts.txt |  parallel -j0 ping -c 10 -i 1 {} >> teste.txt
date >> teste.txt

관련 정보