← Back to team overview

sslug-teknik team mailing list archive

timeout timer i BASH script

 

Hej

jeg har et script kørende som laver en "rsh sh ip accounting" til nogle
routere, men er løbet ind i det problemet at den rsh en gang imellem dør
som den står som zombie process og hænger, og da scriptet kører hver 
10 min, så bliver ram'en på maskinen til sidst brugt op. 

Jeg havde så tænkt mig at kører "rsh sh ip accunting" inde i et timer
function så hvis "rsh sh ip accounting" ikke returner 0 inde for 30
sek. skal processen dræbes. og jeg var også så heldig at finde noget på
nettet som beskrev et shell scripts/functions som skulle kunne det , men 
jeg kan ikke får det til at virke, så håber på at den er en på
sslug-teknik kan hjælp

scriptet for alarm tingen ser så her ud

AlarmHandler() {
        echo "Got SIGALARM, cmd took too long."
        KillSubProcs
        exit 14
}
        KillSubProcs() {
        kill ${CHPROCIDS:-$!}
        if [ $? -eq 0 ] ; then
                echo "Sub-processes killed." ;
        fi
}
SetTimer() {
        DEF_TOUT=${1:-10};
        if [ $DEF_TOUT -ne 0 ] ; then
        sleep $DEF_TOUT && kill -s 14 $$ &
        CHPROCIDS="$CHPROCIDS $!"
        TIMERPROC=$!
        fi
}
UnsetTimer() {
        kill $TIMERPROC
}

# main
PROG="rsh 192.168.1.2 sh ip accounting checkpoint"
trap AlarmHandler 14
SetTimer 5
$PROG &
CHRPROCIDS="$CHRPROCIDS $!"
echo $CHRPROCIDS
wait $!
UnsetTimer
echo "All Done"
exit 0

kører jeg programmet får jeg følgende tilbage meldning

--snip start
[pej@linux alarm]$ ./alarm.sh
2395
Got SIGALARM, cmd took too long.
./alarm.sh: kill: (2394) - No such pid
--snip slut

og imens programmet kører har jeg følgende process liste

--snip start
root      1995  0.1  0.5  3556 2060 ?        S    11:51   0:02  \_/usr/sbin/sshd
pej       1996  0.0  0.3  2560 1412 pts/2    S    11:51   0:00      \_-bash
pej       2387  1.0  0.3  2560 1412 pts/2    S    12:35   0:00	       \_ -bash
pej       2394  0.0  0.3  2560 1412 pts/2    S    12:35   0:00             \_ -bash
pej       2396  1.0  0.1  1932  672 pts/2    S    12:35   0:00             |   \_ sleep 5
root      2395  1.0  0.1  1624  612 pts/2    S    12:35   0:00             \_ rsh 192.168.1.2 sh ip accounting checkpoint


hvorfor prøver alarm scriptet at kill PID 2394 , når det er PID 2395 jeg vil
have dræbt, ? og hvorfor findes PID 2394 ikke , hvis den bare fandtes vil
PID 2395 vel også bleve dræbt da den er en child process til 2394 ?

Håber meget at der er nogle der kan hjælpe

Per Jørgensen