start-all/stop-all/health-check/test-cdc PowerShell scripts. Compatible with PowerShell 5.1 (ASCII only, no emoji).
99 lines
3.4 KiB
PowerShell
99 lines
3.4 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Edu stop all application services script
|
|
.DESCRIPTION
|
|
Closes all edu-app-* terminal windows (started by start-all.ps1)
|
|
Optional: kill processes by port (fallback when windows are closed but processes linger)
|
|
.PARAMETER KillByPort
|
|
Kill processes by port (fallback when windows are closed but processes still alive)
|
|
.EXAMPLE
|
|
.\scripts\stop-all.ps1
|
|
.\scripts\stop-all.ps1 -KillByPort
|
|
#>
|
|
param(
|
|
[switch]$KillByPort
|
|
)
|
|
|
|
$ErrorActionPreference = "Continue"
|
|
|
|
Write-Host "========================================" -ForegroundColor Cyan
|
|
Write-Host " Edu Stop All Services" -ForegroundColor Cyan
|
|
Write-Host "========================================" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
|
|
# ===== 1. Close app service terminal windows =====
|
|
Write-Host "[1/2] Closing app service windows..." -ForegroundColor Yellow
|
|
|
|
$appTitles = @(
|
|
"edu-app-classes",
|
|
"edu-app-iam",
|
|
"edu-app-teacher-bff",
|
|
"edu-app-core-edu",
|
|
"edu-app-content",
|
|
"edu-app-msg",
|
|
"edu-app-data-ana",
|
|
"edu-app-ai",
|
|
"edu-app-api-gateway",
|
|
"edu-app-push-gateway",
|
|
"edu-app-teacher-portal"
|
|
)
|
|
|
|
$closedCount = 0
|
|
foreach ($title in $appTitles) {
|
|
$procs = Get-Process -Name "powershell","pwsh","node","python","uvicorn","go" -ErrorAction SilentlyContinue |
|
|
Where-Object { $_.MainWindowTitle -like "*$title*" }
|
|
|
|
if ($procs) {
|
|
foreach ($p in $procs) {
|
|
try {
|
|
Stop-Process -Id $p.Id -Force -ErrorAction Stop
|
|
Write-Host " [OK] Closed $title (PID $($p.Id))" -ForegroundColor Green
|
|
$closedCount++
|
|
} catch {
|
|
Write-Host " [WARN] Cannot close $title (PID $($p.Id)): $($_.Exception.Message)" -ForegroundColor Yellow
|
|
}
|
|
}
|
|
} else {
|
|
Write-Host " [--] $title window not found" -ForegroundColor Gray
|
|
}
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host " Closed $closedCount windows" -ForegroundColor Green
|
|
Write-Host ""
|
|
|
|
# ===== 2. Kill by port (optional) =====
|
|
if ($KillByPort) {
|
|
Write-Host "[2/2] Killing processes by port..." -ForegroundColor Yellow
|
|
|
|
$ports = @(3000,3001,3002,3003,3004,3005,3006,3007,3008,8080,8081)
|
|
|
|
foreach ($port in $ports) {
|
|
$connections = Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction SilentlyContinue
|
|
if ($connections) {
|
|
foreach ($conn in $connections) {
|
|
try {
|
|
$proc = Get-Process -Id $conn.OwningProcess -ErrorAction Stop
|
|
Stop-Process -Id $conn.OwningProcess -Force -ErrorAction Stop
|
|
Write-Host " [OK] Port $port -> killed $($proc.ProcessName) (PID $($conn.OwningProcess))" -ForegroundColor Green
|
|
} catch {
|
|
Write-Host " [WARN] Port $port -> cannot kill PID $($conn.OwningProcess)" -ForegroundColor Yellow
|
|
}
|
|
}
|
|
} else {
|
|
Write-Host " [--] Port $port free" -ForegroundColor Gray
|
|
}
|
|
}
|
|
} else {
|
|
Write-Host "[2/2] Skipping port kill (use -KillByPort to enable)" -ForegroundColor Gray
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "========================================" -ForegroundColor Cyan
|
|
Write-Host " Stop complete" -ForegroundColor Cyan
|
|
Write-Host "========================================" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
Write-Host "To stop infrastructure:" -ForegroundColor Yellow
|
|
Write-Host " docker compose -f infra/docker-compose.yml --profile p6 --profile observability down" -ForegroundColor White
|
|
Write-Host ""
|