修改设置端口
This commit is contained in:
parent
18adcb65ce
commit
6163d72e2a
@ -1,30 +1,57 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
script_dir=$(cd "$(dirname "$0")"; pwd) # 脚本文件绝对路径
|
# 查找空闲端口
|
||||||
config_dir="$script_dir/../conf"
|
find_free_port() {
|
||||||
source $script_dir/utils/jq_util.sh
|
local start="${1:-10001}"
|
||||||
|
local max="${2:-65535}"
|
||||||
|
|
||||||
old_port=$(jq -r '.inbounds[0].port' "$config_dir/config.json")
|
# 收集当前监听端口(TCP + UDP)
|
||||||
read -p "请输入新的端口[当前端口: $old_port]: " port
|
local used_ports raw
|
||||||
|
if command -v ss >/dev/null 2>&1; then
|
||||||
|
raw=$(ss -lntu 2>/dev/null || true)
|
||||||
|
used_ports=$(printf "%s\n" "$raw" | awk '{print $5}' | sed -n '2,$p' | sed -E 's/.*[:]//g' | sed '/^$/d')
|
||||||
|
elif command -v netstat >/dev/null 2>&1; then
|
||||||
|
raw=$(netstat -lntu 2>/dev/null || true)
|
||||||
|
used_ports=$(printf "%s\n" "$raw" | awk '{print $4}' | sed -n '2,$p' | sed -E 's/.*[:]//g' | sed '/^$/d')
|
||||||
|
elif command -v lsof >/dev/null 2>&1; then
|
||||||
|
raw=$(lsof -i -P -n 2>/dev/null || true)
|
||||||
|
used_ports=$(printf "%s\n" "$raw" | awk '/LISTEN/ {print $9}' | sed -E 's/.*[:]//g' | sed '/^$/d')
|
||||||
|
else
|
||||||
|
echo "Error: neither ss, netstat nor lsof is available to check listening ports." >&2
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
# 如果输入为空,退出脚本
|
# 用关联数组记录已占用端口(需要 bash 4+)
|
||||||
if [[ -z "$port" ]]; then
|
declare -A used_map
|
||||||
echo "输入端口为空, 退出脚本"
|
local p
|
||||||
exit 0
|
for p in $used_ports; do
|
||||||
fi
|
# 过滤掉非数字
|
||||||
|
if [[ $p =~ ^[0-9]+$ ]]; then
|
||||||
|
used_map["$p"]=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# 修改端口
|
# 从 start 到 max 逐个检查
|
||||||
modify_json_file "$config_dir/config.json" ".inbounds[0].port" "$port"
|
for ((port = start; port <= max; port++)); do
|
||||||
|
if [[ -z "${used_map[$port]}" ]]; then
|
||||||
|
echo "$port"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
echo "端口修改成功!新端口为: $port"
|
# 没找到可用端口
|
||||||
|
echo "Error: No available port found in range $start-$max" >&2
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
change_port(){
|
||||||
|
local script_dir=$(cd "$(dirname "$0")"; pwd)
|
||||||
|
local config_dir="$script_dir/../conf"
|
||||||
|
source "$script_dir/utils/jq_util.sh"
|
||||||
|
|
||||||
read -p "是否要重启容器? (y/N): " restart_choice
|
local port=$(find_free_port)
|
||||||
if [[ "$restart_choice" =~ ^[Yy]$ ]]; then
|
modify_json_file "$config_dir/config.json" ".listen" ":$port"
|
||||||
echo "正在重启容器..."
|
echo "设置端口成功"
|
||||||
docker-compose -f $script_dir/../docker-compose.yml down
|
}
|
||||||
docker-compose -f $script_dir/../docker-compose.yml up -d
|
|
||||||
else
|
|
||||||
echo "已跳过重启,请手动重启容器使配置生效"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
change_port
|
||||||
Loading…
Reference in New Issue
Block a user