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

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

저는 아직 bash 스크립팅을 배우는 중이고 모르는 것이 많다는 점부터 말씀드리고 시작하겠습니다. 내가 뭔가를 놓친 경우, 나를 꾸짖어 주시기 바랍니다.

다음으로, 2개의 서로 다른 호스트에 ping을 실행하고 파일로 출력하는 간단한 bash 스크립트를 작성하겠습니다. 이 문제를 해결했고 작동 중입니다. 호기심으로 인해 ping 출력 전후의 날짜를 스크립트에 추가하여 ping을 실행하는 데 걸리는 시간을 알 수 있었습니다. 핑을 1초 간격, 핑 10개, 호스트 2개로 설정했습니다. 내 첫 데이트의 타임스탬프(오래 전...)는 14:36:20이었습니다. 두 번째 날짜(핑 이후)의 타임스탬프는 14:36:40입니다.

따라서 날짜는 두 핑이 모두 완료될 때까지 기다립니다. 이는 ping이 순차적으로 실행됨을 의미합니다.

동시에 실행하여 스크립트를 실행하는 데 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는 ping을 위해 호스트를 저장하는 곳입니다.

답변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

관련 정보