Files
INFRAESTRUCTURA/scripts/monitor_estado_watchdog.ps1
2026-10-03 17:13:39 +02:00

60 lines
2.0 KiB
PowerShell

# monitor_estado_watchdog.ps1 — Asegura que el Monitor de estado esta corriendo (una instancia).
#
# Uso:
# powershell -ExecutionPolicy Bypass -File monitor_estado_watchdog.ps1 -Once # lanza si no corre
# powershell -ExecutionPolicy Bypass -File monitor_estado_watchdog.ps1 -Stop # detiene el monitor
#
# Lo llaman: la tarea programada al iniciar sesion y el plugin global de OpenCode
# (monitor-estado-bootstrap.ts). El propio monitor tiene ademas un lock (lock.py),
# asi que aunque ambos coincidan no habra dos instancias.
param(
[switch]$Once,
[switch]$Stop
)
$ErrorActionPreference = 'SilentlyContinue'
$ScriptsDir = $PSScriptRoot
$Repo = Split-Path -Parent $ScriptsDir
$Script = Join-Path $ScriptsDir 'monitor_estado.py'
$LogDir = Join-Path $Repo 'estado\monitor'
$OutLog = Join-Path $LogDir 'monitor_estado.out.log'
$ErrLog = Join-Path $LogDir 'monitor_estado.err.log'
$LockFile = Join-Path $LogDir '.lock'
if (-not (Test-Path $LogDir)) { New-Item -ItemType Directory -Path $LogDir -Force | Out-Null }
function Get-MonitorProcesos {
Get-CimInstance Win32_Process |
Where-Object { $_.CommandLine -match 'monitor_estado\.py\s+daemon' }
}
if ($Stop) {
$procs = Get-MonitorProcesos
foreach ($p in $procs) { Stop-Process -Id $p.ProcessId -Force }
Remove-Item -LiteralPath $LockFile -Force -ErrorAction SilentlyContinue
Write-Output "[monitor_estado] Detenido ($($procs.Count) proceso(s))."
exit 0
}
$procs = Get-MonitorProcesos
if ($procs) {
Write-Output "[monitor_estado] Ya en marcha ($($procs.Count) proceso). Nada que hacer."
exit 0
}
# Lanzar el daemon en segundo plano, oculto y con log.
$python = (Get-Command python).Source
if (-not $python) { Write-Output "[monitor_estado] Python no encontrado en PATH."; exit 1 }
Start-Process -FilePath $python `
-ArgumentList @('-u', $Script, 'daemon') `
-WorkingDirectory $Repo `
-WindowStyle Hidden `
-RedirectStandardOutput $OutLog `
-RedirectStandardError $ErrLog
Write-Output "[monitor_estado] Daemon lanzado (log: $OutLog)."
exit 0