重命名节点与网关入口包;添加构建和启动边缘节点的 PowerShell 脚本
This commit is contained in:
137
scripts/start-edges.ps1
Normal file
137
scripts/start-edges.ps1
Normal 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user