異なるサーバーで4つの異なるスクリプトを順番に実行するスクリプトがあります。私のスクリプトは、最初のスクリプトがターゲットサーバーで完了するのを待ってから、2番目のスクリプトを起動します。以下はコードです
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