他のサーバーでスクリプトをトリガー

他のサーバーでスクリプトをトリガー

異なるサーバーで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

関連情報