60 lines
2.0 KiB
PowerShell
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
|