잘 작동하지만 시리즈별로 실행되는 스크립트가 있습니다.
스크립트가 텍스트 파일의 각 줄을 가져와 서브셸에서 해당 줄을 실행/생성한 후 다음 줄로 이동하는 등의 작업을 수행하기를 원합니다.
두 가지 이유 때문에 서브셸이 필요합니다.
첫째, 작업을 직렬이 아닌 병렬로 실행하여 더 빠르게 실행하기 위해서입니다.
둘째, 주어진 명령의 출력을 모니터링하고 원격 시스템에서 종료 코드를 반환합니다.
내가 어떻게 할 수 있는지 아는 사람 있나요?
약간의 배경 지식으로, 텍스트 파일의 각 줄은 옵션, 사용자 입력 및 다른 입력 파일에서 수집된 기능을 사용하여 원격 시스템에서 실행되는 ssh 명령 모음이므로 스크립트에 의해 생성된 출력의 각 줄은 독립 실행형 서버 명령입니다. .
action 을 통해 스크립트를 호출합니다 /bin/bash $temp_file
.
예제 스크립트는 다음과 같습니다.
sshpass -p <PASSWORD> ssh -o StrictHostKeyChecking=no -p 22 [email protected] 'cat /etc/hostname ;echo 'START';echo `date +%Y-%m-%d` ; echo <PASSWORD> |sudo -S yum update -y; cat /etc/hostname ;echo 'FINISH';echo `date +%Y-%m-%d` ;echo '';echo ''
이것은 단지 예일 뿐이며 실행할 명령(예: yum update -y
여기에서 에코 및 날짜와 함께 사용하는 명령)은 단일 명령으로 대체되거나 or로 ;
구분됩니다 .$$
해당 줄에 문제를 일으킬 수 있는 문자가 많이 있다는 것을 알고 있습니다.
답변1
GNU Parallel은 다음을 위해 만들어졌습니다:
parallel --joblog my.log < myfile.sh
--sshlogin/--sshloginfile
, --jobs N
, --tag
및 도 유용 --linebuffer
할 수 있습니다 . --nonall
어떤 작업이 관련되어 있는지 확인하려면 실행하려는 원격 작업에 대한 추가 정보를 공개해야 합니다.
답변2
각 줄을 읽고 eval
이를 평가하는 데 사용하면 됩니다.
IFS=""
while read -r line; do
eval "( $line )"
done < command_file
요청한 최소한의 작업을 수행하십시오. 즉, 각 줄을 서브셸에서 실행하는 것입니다.