03-oct: superguardado automático
This commit is contained in:
59
scripts/monitor_estado_watchdog.ps1
Normal file
59
scripts/monitor_estado_watchdog.ps1
Normal file
@@ -0,0 +1,59 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user