스크립트 내용 및 동작
수행환경 : 센트오에스 리눅스 5.9 (32비트) on vmware
내용 : 이하첨부
동작 : rsh로 상대측 서버의 DB상태 코멘트를 확인하고,
해당코멘트가 Available 이 아닌경우
hadr_takeover.sh라는 스크립트를 실행
하고, 그렇지 않은 경우 계속 감시하도록 함
( 오동작 내용 )
스크립트내용 중 "$STATUS" != "Available" 부분이 != 인데도 hadr_takeover.sh를 실행해버림
스크립트 내용을 "$STATUS" = "Operable" 로 바꾸어 동작을 확인해보니 hadr_takeover.sh를 실행해야 하는데도 실행은 안함!!
(스크립트 내용)
[db2inst1@linuxx86svr1 ~]$ cat hadr_mon.sh
#!/bin/sh
while true
do
rsh linuxx86svr0 /db2home/db2inst1/sqllib/bin/db2gcf -i db2inst1 -s | grep DB2 | awk '{ print $4 }' | read STATUS
if [ "$STATUS" != "Available" ]
then
sh hadr_takeover.sh
exit 0
fi
sleep 60
done
#!/bin/sh
while true
do
rsh linuxx86svr0 /db2home/db2inst1/sqllib/bin/db2gcf -i db2inst1 -s | grep DB2 | awk '{ print $4 }' | read STATUS
if [ "$STATUS" != "Available" ]
then
sh hadr_takeover.sh
exit 0
fi
sleep 60
done
[db2inst1@linuxx86svr1 ~]$ db2gcf -i db2inst1 -s | grep DB2 | awk '{ print $4 }'
Available
Available
도움바랍니다.
결과값을 변수로 담으시려면,
STATUS=`cat ./1 | awk '{print \$4}'` 이런형태로 잡으시면 됩니다.
$ cat ./1
-----------------------
1 2 3 Available
-----------------------
ex) test pass
STATUS=`cat ./1 | awk '{print \$4}'`
echo $STATUS
RSH 테스트는 해보지 않아서, 안되는 부분은 해결해 보심이...
STATUS=`rsh linuxx86svr0 "(/db2home/db2inst1/sqllib/bin/db2gcf -i db2inst1 -s | grep DB2 | awk '{print \$4}')"`
STATUS=`rsh localhost "(cat ./1 | awk '{print \$4}')"`
이런 것이 쉽게 된다고 해서요.