Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: BerkAdmin в Jun 16, 2007, 21:58



Титла: Ping script
Публикувано от: BerkAdmin в Jun 16, 2007, 21:58
Здравейте, искам да направя скрипт, който да пинг-ва определено IP, и когато IP-то не е на линия машината на която е скрипта да изпраща SMS на определен номер, във който да пише, че IP-то не е на линия в момента, а когато отново се появи на линия да изпраща друг SMS, който да казва, че IP-то отново е на линия. Моля за помощ от по-напредналите във тази насока. Благодаря предварително. :)


Титла: Ping script
Публикувано от: vladi4ko в Jun 17, 2007, 01:10
може да пробваш с тази програма
http://www.kilievich.com/fpinger/

или да си напишеш нещо съсвсем просто на баш и да го сложиш в кронтам

Примерен код
#!/bin/bash
### EDITVASH TYK ####
TARGET_IP="X.X.X.X"
TARGET_EMAIL="XXXXXXXXXXXX@sms.mtel.net"
#####################
PING_REPLY=`ping -w 4 $TARGET_IP | grep " received"`
PACKET_RECEIVED=`echo $PING_REPLY | awk '{print $4}'`
PACKET_LOSS=`echo $PING_REPLY | awk '{print $6}'`

if [ ! -e "/tmp/ping_l" ]; then
    echo "0" > "/tmp/ping_l"
fi

if [ ! -e "/tmp/ping_r" ]; then
    echo "0" > "/tmp/ping_r"
fi

if [ $PACKET_RECEIVED -lt "2" ]; then
        PING_L=`cat /tmp/ping_l | grep "^"`
        echo `expr $PING_L + 1` > /tmp/ping_l
        echo "0" > /tmp/ping_r
else
        PING_R=`cat /tmp/ping_r | grep "^"`
        echo `expr $PING_R + 1` > /tmp/ping_r
        echo "0" > /tmp/ping_l
fi

PING_L=`cat /tmp/ping_l | grep "^"`
PING_R=`cat /tmp/ping_r | grep "^"`
if [ $PING_L == 1 ] && [ $PING_R == 0 ]; then
#echo "is offline"
echo $PACKET_RECEIVED 'received,' $PACKET_LOSS 'packets lost' | mail -s "$TARGET_IP is offline:" $TARGET_EMAIL
fi

if [ $PING_L == 0 ] && [ $PING_R == 1 ]; then
#echo "is online"
    echo $PACKET_RECEIVED 'received,' $PACKET_LOSS 'packets lost' | mail -s "$TARGET_IP is online:" $TARGET_EMAIL
fi


Титла: Ping script
Публикувано от: neter в Jun 17, 2007, 02:55
Аз ще дам за пример и това, което съм си драснал за мен, за да покажа още един вариант на изписване на скрипта, а и за да внеса малко подобрение - случая, когато проверяващия хост няма връзка. Иначе, без тази проверка, когато проверяващия хост загуби връзка, ти би получил смс за загуба и след това за възстановяване на връзката на хоста, който проверяваш, а това не би било вярно. С тази проверка, когато проверяващия хост загуби връзка, ще се създава файл някъде според променливата no_net_dir с име според променливата no_net_file, а когато връзката на проверяващия се възстанови, този файл ще се премахне и ти ще получиш смс, че се е възстановила връзката на проверяващия, а не на проверения. Та... ето го скрипта
Примерен код
#!/bin/bash

monitor_host="111.222.333.444"
test_host="212.73.129.164"
no_net_dir="/home/user/Desktop"
no_net_file="Nqma_net"
script_dir="/monitor"
sms_from="nqkakyv@email.adres"
sms_to="359888123456@sms.mtel.net"

########## NE E NUJNO POVECHE REDAKTIRANE ##########

ping -c 1 -w 10 $monitor_host &>/dev/null
if [ $? -ne 0 ]; then
    ping -c 1 -w 2 $test_host &>/dev/null
    if [ $? -ne 0 ]; then
        find $no_net |grep $no_net_file &>/dev/null
        if [ $? -ne 0 ]; then
            touch $no_net_dir/$no_net_file
        fi
    else
        find $script_dir |grep ping_no &>/dev/null
        if [ $? -ne 0 ]; then
            rm $script_dir/ping_yes
            touch $script_dir/ping_no
            echo $monitor_host 'is DOWN' | mail -a "From: $sms_from" -t $sms_to
        fi
    fi
else
    find $no_net_dir |grep $no_net_file &>/dev/null
    if [ $? -ne 1 ]; then
        rm $no_net_dir/$no_net_file
        echo 'My host is UP' | mail -a "From: $sms_from" -t $sms_to
    else
        find $script_dir |grep ping_yes &>/dev/null
        if [ $? -ne 0 ]; then
            rm $script_dir/ping_no
            touch $script_dir/ping_yes
            echo $monitor_host 'is UP' | mail -a "From: $sms_from" -t $sms_to
        fi
    fi
fi