나는이 일을하는 간단한 BASH 프로그램이 있습니다배쉬 포크 재시도 : 자원 일시적으로 사용할 수 없습니다
시작했을 때, 프로그램은 SQL 테이블에서 4999 개 행을 읽어max_proc_snmpget=30
getHostnamesFromRouter() {
while [ `find $proc_dir -name snmpgetproc* | wc -l` -ge "$max_proc_snmpget" ];do
{
echo "sleeping, fping in progress";
sleep 1;
}
done
temp_ip=$($mysql --skip-column-names -h $db_address -u $db_user -p$db_passwd $db_name -e "select ip_routeur,code_site from $db_vtiger_table where $db_vtiger_table.ip_routeur NOT IN (select ip from $db_erreur_table);")
while read ip codesite;do
{
sendSNMPGET $ip $snmp_community $code_site &
}
done<<<"$temp_ip"
}
sendSNMPGET() {
touch $procdir/snmpgetproc.$$
hostname=`snmpget -v1 -c $2 $1 sysName.0`
if [ "$hostname" != "" ]
then
#$mysql -h $db_address -u $db_user -p$db_passwd $db_name -e "insert into $db_routeur_table (hostname,code_site,ip) VALUES ($hostname,$1,$3);"
echo "kikou"
fi
rm -f $procdir/snmpgetproc.$$
}
, 다음에 30 개 스레드의 최대 시작해야을 "sendSNMPGET"기능을 시작하십시오.
이것은 무엇이 아닙니다.
콘솔은 미친 얻고 많이 보내이 문제를 가지고 있지 않습니다
./scan-snmp.sh: fork: Resource temporarily unavailable
./scan-snmp.sh: fork: Resource temporarily unavailable
./scan-snmp.sh: fork: Resource temporarily unavailable
./scan-snmp.sh: fork: Resource temporarily unavailable
./scan-snmp.sh: fork: Resource temporarily unavailable
./scan-snmp.sh: fork: Resource temporarily unavailable
./scan-snmp.sh: fork: Resource temporarily unavailable
./scan-snmp.sh: fork: Resource temporarily unavailable
kikou
kikou
kikou
kikou
kikou
kikou
내가 (각 스레드에 대한 파일을 작성하고 VAR로 제한) 다른 스크립트에서 유사한 기능을 가지고 있습니다.