Strona 1 z 1

Po upływie czasu skrypt nie realizuje powierzonych zadań

: 21 lutego 2012, 18:37
autor: CzErI
Napisałem skrypt, który odwołuje się do dhcp.leases i wykonuje czynności po przydzieleniu bądź zwolnieniu przez dhcp adresu ip.

Dziwna sytuacja występuje po około godzinie działania, a mianowicie, skrypt przestaje realizować powierzone zadania. Skrypt nie zgłasza żadnych błędów ani nic, działa cały czas tylko przestaje realizować czynności mu powierzone. Może orientujecie się dlaczego tak się dzieję?
Oto ten skrypt:

Kod: Zaznacz cały

#!/bin/bash


DHCPDLEASES="/var/lib/dhcp/dhcpd.leases"


touch "$DHCPDLEASES"
exec 0< "$DHCPDLEASES"


toupper()    # funkcja zamieniająca małe znaki na wielki
{
    local char="$*"
    out=$(echo $char | tr [:lower:] [:upper:])
    local retval=$?
    echo "$out"
    unset out char
    return $retval
}




# go to the end of file
while read line; do
    true;
    done
    
    # process new entries
while true; do
    if read line; then
           # ...
    #    echo "LINE: $line" 




    zmienna4=$zmienna4`echo $line | grep 'lease' | awk '{print $2}'`    # wyciągamy adres ip
    zmienna2=$zmienna2`echo $line | grep 'state'| awk '{print $3}'| cut -c 1-6`    #wyciągamy status
    zmienna3=$zmienna3`echo $line | grep 'hardware' | awk '{print $3}' | cut -c 1-17`    #wyciągamy adres mac 


    zmienna3=$(toupper $zmienna3)    #sprawiamy by adres mac miał wielki znaki
    zmienna3=`echo $zmienna3 | tr -s : -`


    
    zmienna="Line: $zmienna4 $zmienna2 $zmienna3"    #do zmiennej przypisujemy adres ip, stan oraz oadres mac


    ip=`echo "$zmienna " | grep 'Line' | awk '{print $2 } '`
    if [ $ip <> " " ]
    then
    state=`echo "$zmienna " | grep 'Line' | awk '{print $3}'`
    if [ $state <> " " ]
    then
        mac=`echo "$zmienna " | grep 'Line' | awk '{print $4}'`
        if [ $mac <> " " ]
        then


        echo "$zmienna"
        zmienna4=" ";
        zmienna3=" ";
        zmienna2=" ";
        if [ $state == "free;" ]
        then
            iptables -D FORWARD --source $ip -j ACCEPT        #usuwamy regułę
            iptables -D FORWARD --destination $ip -j ACCEPT    #usuwamy regułę
            iptables -I FORWARD --source $ip -j DROP
            iptables -I FORWARD --destination $ip -j DROP


        else
            echo "update radacct set framedipaddress = '$ip' where acctstoptime IS NULL and callingstationid = '$mac' " | mysql -u root -pzaq12wsx radius
            iptables -D FORWARD --source $ip -j DROP
            iptables -D FORWARD --destination $ip -j DROP
            iptables -I FORWARD --source $ip -j ACCEPT
            iptables -I FORWARD --destination $ip -j ACCEPT


        fi
        fi
    fi
    fi


    #-------------------------------------------------------    
    else
    zmienna4=" ";
    zmienna3=" ";
    zmienna2=" ";


        sleep 0.01
    fi


done
        
     
     

: 06 marca 2012, 21:33
autor: fnmirk
Odświeżenie tematu.

: 07 marca 2012, 17:46
autor: lessmian2
Odpal go przez bash -x i zobacz co będzie robił po tej godzinie.