#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH export LANG=en_US.UTF-8 export LANGUAGE=en_US:en get_node_url(){ nodes=(http://183.235.223.101:3389 http://125.88.182.172:5880 http://128.1.164.196 http://103.224.251.67 http://download.bt.cn); i=1; for node in ${nodes[@]}; do start=`date +%s.%N` result=`curl -sS --connect-timeout 3 -m 60 $node/check.txt` if [ "$result" = 'True' ];then end=`date +%s.%N` start_s=`echo $start | cut -d '.' -f 1` start_ns=`echo $start | cut -d '.' -f 2` end_s=`echo $end | cut -d '.' -f 1` end_ns=`echo $end | cut -d '.' -f 2` time_micro=$(( (10#$end_s-10#$start_s)*1000000 + (10#$end_ns/1000 - 10#$start_ns/1000) )) time_ms=$(($time_micro/1000)) values[$i]=$time_ms; urls[$time_ms]=$node i=$(($i+1)) if [ $time_ms -lt 50 ];then break; fi fi done j=5000 for n in ${values[@]}; do if [ $j -gt $n ];then j=$n fi if [ $j -lt 50 ];then break; fi done if [ $j = 5000 ];then NODE_URL='http://download.bt.cn'; else NODE_URL=${urls[$j]} fi } GetCpuStat(){ time1=$(cat /proc/stat |grep 'cpu ') sleep 1 time2=$(cat /proc/stat |grep 'cpu ') cpuTime1=$(echo ${time1}|awk '{print $2+$3+$4+$5+$6+$7+$8}') cpuTime2=$(echo ${time2}|awk '{print $2+$3+$4+$5+$6+$7+$8}') runTime=$((${cpuTime2}-${cpuTime1})) idelTime1=$(echo ${time1}|awk '{print $5}') idelTime2=$(echo ${time2}|awk '{print $5}') idelTime=$((${idelTime2}-${idelTime1})) useTime=$(((${runTime}-${idelTime})*3)) [ ${useTime} -gt ${runTime} ] && cpuBusy="true" if [ "${cpuBusy}" == "true" ]; then cpuCore=$((${cpuInfo}/2)) else cpuCore=$((${cpuInfo}-1)) fi } GetPackManager(){ if [ -f "/usr/bin/yum" ] && [ -f "/etc/yum.conf" ]; then PM="yum" elif [ -f "/usr/bin/apt-get" ] && [ -f "/usr/bin/dpkg" ]; then PM="apt-get" fi } cpuInfo=$(getconf _NPROCESSORS_ONLN) if [ "${cpuInfo}" -ge "4" ];then GetCpuStat else cpuCore="1" fi GetPackManager if [ ! $NODE_URL ];then echo '正在选择下载节点...'; get_node_url fi