sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #61909
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