补充部署脚本netstat端口检测

This commit is contained in:
wkc
2026-04-01 10:47:40 +08:00
parent 3ce3c438a9
commit f8b2bf2afc
3 changed files with 66 additions and 2 deletions

View File

@@ -65,7 +65,11 @@ require_port_command() {
return 0
fi
log_error "缺少端口检测命令: ss 或 lsof"
if command -v netstat >/dev/null 2>&1; then
return 0
fi
log_error "缺少端口检测命令: ss、lsof 或 netstat"
exit 1
}
@@ -177,7 +181,12 @@ is_port_listening() {
return $?
fi
lsof -nP -iTCP:"$port" -sTCP:LISTEN >/dev/null 2>&1
if command -v lsof >/dev/null 2>&1; then
lsof -nP -iTCP:"$port" -sTCP:LISTEN >/dev/null 2>&1
return $?
fi
netstat -an 2>/dev/null | grep -E "[\\.:]$port[[:space:]].*LISTEN" >/dev/null 2>&1
}
is_managed_backend_pid() {

View File

@@ -182,10 +182,33 @@ test_multiple_release_zip_should_fail() {
cleanup_release_dir "$release_dir"
}
test_netstat_fallback_should_work() {
release_dir=$(mktemp -d)
backend_port=$(find_free_port)
trap 'cleanup_release_dir "$release_dir"' EXIT INT TERM
prepare_release_dir "$release_dir" "$backend_port"
mkdir -p "$release_dir/fake-port-bin"
ln -sf /usr/sbin/netstat "$release_dir/fake-port-bin/netstat"
(
cd "$release_dir"
PATH="$release_dir/fake-port-bin:/usr/bin:/bin" ./deploy_from_package.sh
)
assert_file_exists "$release_dir/frontend/dist/index.html"
backend_pid=$(cat "$release_dir/backend/backend.pid")
kill -0 "$backend_pid" 2>/dev/null || fail "expected backend pid to be running with netstat fallback"
trap - EXIT INT TERM
cleanup_release_dir "$release_dir"
}
main() {
[ -f "$SCRIPT_UNDER_TEST" ] || fail "script under test not found: $SCRIPT_UNDER_TEST"
test_deploy_success
test_multiple_release_zip_should_fail
test_netstat_fallback_should_work
printf 'PASS: deploy_from_package tests\n'
}