#!/bin/bash

# www1.test.com 에서 해당되는 모든 서버에 ping 신호를 보낸다
# ping 신호가 도착하지 않으면 특정 휴대전화로 sms 문자메세지를 보낸다.


HOST=("www1.test.com" "www2.test.com" "www3.test.com" "www4.test.com" "www5.test.com" www6.test.com" "www7.test.com" "www8.test.com" "www9.test.com" "www10.test.com")


# 루프를 위한 인덱스, 배열전체 크기를 반환하는 변수설정

FLAG=0
TOTAL_ARRAY_NUM=${#HOST[@]}

while [ "$FLAG" -lt "$TOTAL_ARRAY_NUM" ]
do

   # ping 3회 쏜다.

   # 상태값을 저장해 0이 아닌 코드가 나오면 sms 관련 루틴을 실행 시킨다.
   /bin/ping -c3 ${HOST[$FLAG]} > /dev/null 2>&1
   END_CODE=$?
   if [ "$END_CODE" != "0" ]; then

       # sms 루틴 호출

       # 커맨드모드로 호출할때 파라미터를 get/post 방식이 아닌 바이너리의 인자형태로 보낸다.
       /usr/local/bin/php -f /www/htdocs/ping.php ${HOST[$FLAG]}
   fi
   let "FLAG = $FLAG + 1"
done

exit 0


$ cat /www/htdocs/ping.php

<?

$host = $argv[1];

// sms 전송하는 루틴

?>

$


sms 전송서비스는 해당 업체를 선정해서 넣어준다.

cgi 모드에서 php를 실행시킬때 php 바이너리와 -f 옵션을 주고 해당 스크립트를 입력한다.


단, 아파치 모듈형태의 get/post 전송방식으로 파라미터를 넘기지않고 cgi 모드의 whitespace로 구분된 인자의 형태로 넘긴다.

파라미터를 받는 스크립트에서는 $argv 배열변수로 접근할 수 있다.


$argv[0] = "/www/htodcs/ping.php";

$argv[1] = "www2.test.com";

TAG ping, sms