重命名节点与网关入口包;添加构建和启动边缘节点的 PowerShell 脚本

This commit is contained in:
2025-05-17 19:01:20 +08:00
parent 14a778101d
commit aa967fbd6a
7 changed files with 193 additions and 0 deletions

137
scripts/start-edges.ps1 Normal file
View File

@@ -0,0 +1,137 @@
# 批量启动边缘节点并在停止时清理所有进程
# 每秒启动100个节点最多启动10000个
# 存储所有进程ID的数组
$processes = @()
# 计数器
$nodeCounter = 0
# 最大节点数
$maxNodes = 1000
# 每批次启动的节点数
$batchSize = 100
# API地址
$onlineApi = "http://192.168.3.42:8080/api/edge/online"
$offlineApi = "http://192.168.3.42:8080/api/edge/offline"
# 节点可执行文件路径
$edgeExePath = Join-Path -Path $PSScriptRoot -ChildPath "..\bin\proxy_edge_win_amd64.exe"
# 检查可执行文件是否存在
if (-not (Test-Path -Path $edgeExePath)) {
Write-Host "错误:找不到边缘节点可执行文件: $edgeExePath" -ForegroundColor Red
Write-Host "请先运行 build-edge.ps1 构建可执行文件" -ForegroundColor Yellow
exit 1
}
# 定义清理函数,终止所有进程
function Cleanup {
Write-Host "`n正在终止所有节点进程..." -ForegroundColor Yellow
# 计数器
$killedCount = 0
foreach ($process in $processes) {
try {
$proc = Get-Process -Id $process -ErrorAction SilentlyContinue
if ($proc) {
Stop-Process -Id $process -ErrorAction SilentlyContinue
$killedCount++
# 每终止100个进程显示一次进度
if ($killedCount % 100 -eq 0) {
Write-Host "已终止 $killedCount 个节点进程" -ForegroundColor Cyan
}
}
} catch {
# 忽略已终止的进程错误
}
}
Write-Host "总共终止了 $killedCount 个节点进程" -ForegroundColor Green
# 最后确认清理
$remainingProcs = Get-Process | Where-Object { $_.Path -eq $edgeExePath }
if ($remainingProcs) {
$remainingCount = $remainingProcs.Count
Write-Host "尝试强制终止剩余的 $remainingCount 个节点进程..." -ForegroundColor Red
$remainingProcs | Stop-Process -Force -ErrorAction SilentlyContinue
}
Write-Host "清理完成!" -ForegroundColor Green
}
# 注册Ctrl+C事件处理
$null = [Console]::CancelKeyPress.Connect({
param($sender, $e)
$e.Cancel = $true # 防止立即退出,让清理函数有时间执行
Cleanup
exit 0
})
# 显示启动信息
Write-Host "开始批量启动边缘节点..." -ForegroundColor Green
Write-Host "每秒将启动 $batchSize 个节点,最多启动 $maxNodes 个节点" -ForegroundColor Cyan
Write-Host "按下 Ctrl+C 停止并清理所有节点" -ForegroundColor Yellow
Write-Host "--------------------------------------------------" -ForegroundColor White
try {
while ($nodeCounter -lt $maxNodes) {
$batchStartTime = Get-Date
$startedInBatch = 0
# 批量启动节点
for ($i = 0; $i -lt $batchSize; $i++) {
# 生成随机名称
$randomName = "edge-" + [Guid]::NewGuid().ToString().Substring(0, 8)
# 启动进程
$startInfo = New-Object System.Diagnostics.ProcessStartInfo
$startInfo.FileName = $edgeExePath
$startInfo.Arguments = "-n `"$randomName`" -online `"$onlineApi`" -offline `"$offlineApi`""
$startInfo.UseShellExecute = $false
$startInfo.CreateNoWindow = $true # 不显示命令行窗口
$process = [System.Diagnostics.Process]::Start($startInfo)
$processes += $process.Id
$nodeCounter++
$startedInBatch++
# 如果达到最大节点数,提前退出循环
if ($nodeCounter -ge $maxNodes) {
break
}
}
# 计算本批次启动用时
$batchDuration = (Get-Date) - $batchStartTime
$batchTimeMs = $batchDuration.TotalMilliseconds
# 显示进度
Write-Host "已启动 $nodeCounter 个节点 (本批次 $startedInBatch 个,耗时 $([math]::Round($batchTimeMs, 0)) ms)" -ForegroundColor Green
# 计算需要等待的时间以保持每秒启动指定数量节点
$waitTimeMs = 1000 - $batchTimeMs
if ($waitTimeMs -gt 0) {
Start-Sleep -Milliseconds $waitTimeMs
}
}
} catch {
Write-Host "发生错误: $_" -ForegroundColor Red
} finally {
# 如果达到最大节点数,提示用户
if ($nodeCounter -ge $maxNodes) {
Write-Host "`n已达到最大节点数 $maxNodes" -ForegroundColor Magenta
Write-Host "按下 Ctrl+C 停止并清理所有节点" -ForegroundColor Yellow
# 保持脚本运行,等待用户手动终止
try {
while ($true) { Start-Sleep -Seconds 1 }
} catch {
# Ctrl+C被捕获时会进入这里
Cleanup
}
} else {
# 脚本异常终止时执行清理
Cleanup
}
}