ik moet een groot aantal routers benaderen vanuit een script. Onder andere moeten de configs van deze routers mbv TFTP worden gebackuped naaar een tftp server. Gemiddeld duurt dit zo'n 30 seconden per router. Gezien het grote aantal routers wil ik dit graag forken.
Als ik alle routers tegelijkertijd ga benaderen krijg ik een aantal problemen TFTP servers die het niet trekken management verbindingen die vollopen etc etc. Ik wil dus een maximaal aantal child processen (zeg 20) hebben tegelijktijd. Tot nu toe heb ik het volgende in elkaar geklust
%ips is een hash met key/value routernaam ip. Dit fork principe werkt in ieder geval. ik zie alleen dus niet hoe ik moet beperken dat er maar 20 processen tegelijktijd opgestart mogen worden. Wie kan me op weg helpen verder
Als ik alle routers tegelijkertijd ga benaderen krijg ik een aantal problemen TFTP servers die het niet trekken management verbindingen die vollopen etc etc. Ik wil dus een maximaal aantal child processen (zeg 20) hebben tegelijktijd. Tot nu toe heb ik het volgende in elkaar geklust
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| foreach $router (keys(%ips)) {
print "$router\n";
$newpid=fork();
if ($newpid == 0) {
#it is a child
$ip=$ips{$router};
print "child $$ is going to ping $ip\n";
$ip=$ips{$router};
#meer dingen nog per router toevoegen
$ping=`ping $ip`;
if ($ping=~/alive/) {
print "$router ok\n";
}
else {
print "$router nok\n";
}
exit;
}
else {
#it is the mother
push(@kids,$newpid);
}
} |
%ips is een hash met key/value routernaam ip. Dit fork principe werkt in ieder geval. ik zie alleen dus niet hoe ik moet beperken dat er maar 20 processen tegelijktijd opgestart mogen worden. Wie kan me op weg helpen verder
[ Voor 3% gewijzigd door TrailBlazer op 06-01-2004 08:26 ]