다른 서버에서 4개의 다른 스크립트를 차례로 실행하는 스크립트가 있습니다. 내 스크립트는 첫 번째 스크립트가 대상 서버에서 완료될 때까지 기다린 다음 두 번째 스크립트를 트리거합니다. 아래는 코드입니다
SCB_CMD=/sc/db2home/scbinst/bin/reload_scrpt1.sh
SCB_LOG=/sc/db2home/scbinst/log/reload_scrpt1.log
echo `date` "Executing $SCB_HOST:$SCB_CMD ..."
ssh $SCB_HOST "$SCB_CMD | tee $SCB_LOG"
RC=$?
#---------------------------------------------------------------------------
# -- Check for errors
#---------------------------------------------------------------------------
if [ $RC -ne 0 ]
then
echo `date` "!error occurred executing SCB load script1!"
exit 99
fi
#---------------------------------------------------------------------------
SCB_CMD=/sc/db2home/scbinst/bin/reload_scrpt2.sh
SCB_LOG=/sc/db2home/scbinst/log/reload_scrpt2.log
#---------------------------------------------------------------------------
# -- Execute the remote load script
#---------------------------------------------------------------------------
echo `date` "Executing $SCB_HOST:$SCB_CMD ..."
ssh $SCB_HOST "$SCB_CMD | tee $SCB_LOG"
--------------------------------------------
대상 서버에서 4개의 스크립트를 모두 병렬로 트리거하는 방법이 있습니까?
답변1
&
명령이 끝나면 작업이 백그라운드로 전환됩니다.
스크립트를 다시 작성하겠습니다.
커넥터.sh
#!/usr/bin/env bash
echo `date` "Executing $1:$2"
# 1 host, 2 cmd, 3 log
ssh $1 "$2 | tee $3"
Runner.sh 스크립트 추가
#!/usr/bin/env bash
connector.sh 127.0.0.1 /sc/db2home/scbinst/bin/reload_scrpt1.sh /var/log.log &
connector.sh 127.0.0.1 /sc/db2home/scbinst/bin/reload_scrpt2.sh /var/log.log &
connector.sh 127.0.0.1 /sc/db2home/scbinst/bin/reload_scrpt3.sh /var/log.log &
답변2
작업을 병렬로 시작할 수 있습니다. 이 명령은 명령줄에서 작동하고 개별적으로 실행한다고 가정합니다 ssh
. 즉, 원격 대 로컬 m/c 문제에는 문제가 없습니다.
for i in `seq 1 4`; do
SCB_CMD=/sc/db2home/scbinst/bin/reload_scrpt${i}.sh
SCB_LOG=/sc/db2home/scbinst/log/reload_scrpt${i}.log
echo `date` "Launching $SCB_HOST:$SCB_CMD ..."
ssh "$SCB_HOST" "$SCB_CMD | tee $SCB_LOG" &
sleep 1
done