본문 바로가기
프로그램개발/Linux(Apache.vim)

ping 체크로 서버 생존여부 판별해서 sms 전송하는 쉘스크립트

by 크레도스 2014. 1. 8.

#!/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";
[출처] ping 체크로 서버 생존여부 판별해서 sms 전송하는 쉘스크립트|작성자 이뉴엔도