Po up

Potrzebujesz pomocy z C, C++, perl, python, itp.
CzErI
Posty: 1
Rejestracja: 20 kwietnia 2008, 18:25

Po upływie czasu skrypt nie realizuje powierzonych zadań

Post 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
        
     
     
fnmirk
Senior Member
Posty: 8321
Rejestracja: 03 grudnia 2007, 06:37

Post autor: fnmirk »

Odświeżenie tematu.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Odpal go przez bash -x i zobacz co będzie robił po tej godzinie.
ODPOWIEDZ