本文主要讲的是思想
当前的端口计算是直接获取服务器已经使用得端口和数据库表中已经配置的valid=1端口,还有该机器新分配的当前端口作为排除目标,排除后得到的端口再按顺序使用.
支持任意网段,任意DB,任意端口,任意ID服
>/tmp/ports.txt
ports=$(cat /tmp/ports.txt)
MYSQL_CMD='mysql -u123 -p123 -h123 -e'
serverport=$(ss -tln|awk '{print $4}'|grep -v '[a-Z]'|awk -F: '{print $2}'|grep -v '^$'|sort -nr|uniq)
gameport=$($MYSQL_CMD 'select port from port.port where valid=1;'|grep -v port|sort -nr|uniq)
range_start=10000 range_end=65432 num_ports=5 i=0
lemon(){
for port in $(seq $range_start $range_end); do
if [[ ! "$gameport" =~ $port ]] && [[ ! "$serverport" =~ $port ]] && [[ ! "$ports" =~ $port ]]; then
var_name="port_$i"
eval "$var_name=$port"
i=$((i+1))
fi
if [[ $i -eq $num_ports ]]; then
break
fi
done
for ((j=0; j<i; j++)); do
var_name="port_$j"
#eval "echo $var_name=\$$var_name"
done
}
lemon
echo $port_0>>/tmp/ports.txt
echo $port_1>>/tmp/ports.txt
echo $port_2>>/tmp/ports.txt
echo $port_3>>/tmp/ports.txt
echo $port_4>>/tmp/ports.txt
echo $port_0
echo $port_1
echo $port_2
echo $port_3
echo $port_4
文件内容如下
网段 区服 数据库