如何使用bash脚本动态移植和/或从静态端口移植

问题描述 投票:-1回答:1

我正在尝试使用bash脚本动态移植和/或从静态端口移植。这是我的两个问题:

  1. 到目前为止,我已经尝试过许多解决端口范围的方法,并且似乎只有端口范围正在运行,但是它同时启动了该范围内的所有端口,而不是其中一个端口。
  2. 如果使用除bash之外的其他语言,我找不到动态的主机托管解决方案,因为我使用的是基本的Tomcat server.xml,但如果这不是正确的方向,则想举一些示例。

我仅发布端口范围解决方案,但是在启动其中一个端口(如果可用)时遇到问题。任何反馈都很棒!

#!/bin/bash
PORTS=( $(seq 8443 8444) )
for i in "${PORTS[@]}"; do
  #I also tried, if nc -l -p "${PORTS[$i]}", but didn't launch anything
  if nc -z "${PORTS[$i]}"; then  
     echo "IN USE"
  else
     echo "FREE"
     if [[ !z "$CHROME" ]]; then
         $CHROME "https://mysite:${PORTS[$i]/login" &
     fi
  fi 
done

server.html的片段

<Connector 
     port="8443"
     redirectPort="8080"
/> 
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />    
linux bash tomcat netstat server.xml
1个回答
0
投票

此命令nc -l -p $PORT将打开端口$PORT,并将等待直到获得一些数据,因此,如果需要继续执行脚本,则将其像这样放在后台

nc -l -p $PORT &

检查命令nc -z有点儿麻烦,据说

 -z      Specifies that nc should just scan for listening daemons, without sending any data to them.
         It is an error to use this option in conjunction with the -l option.

但实际上是关闭端口,请在第一个终端中尝试此端口

nc -l -p 5555

在第二个终端

$ nc -z localhost 5555; echo $?
0
$ nc -z localhost 5555; echo $?
1

第二次运行显示该端口已关闭,因此我建议使用netstat -lnp检查端口

netstat -lnp 2> /dev/null | grep -o $PORT && echo used || echo free
© www.soinside.com 2019 - 2024. All rights reserved.