공개 런타임 워치독 창·복구 결함 3건 수정
재부팅 뒤 워치독이 5분마다 콘솔 창에 실패만 뿌리던 문제의 원인 세 가지를 고친다. - 워치독이 DB 다운을 감지하고 직접 복구한다. postgres(vignette-dev-db) 기동은 boot 담당이라 start-public-runtime.ps1 재호출로는 절대 복구되지 않았고, 그 결과 워치독은 고칠 수 없는 대상에 start를 무한 재시도하며 실패만 기록했다. db를 health check 항목에 넣고, 재시작 전에 컨테이너를 되살리며, 복구 실패 시에는 runtime 재시작을 시도하지 않고 종료한다. - 작업 액션을 wscript 런처(watch-public-runtime-task.vbs) 경유로 등록한다. powershell.exe를 직접 등록하면 -WindowStyle Hidden이어도 conhost 창이 매 실행 번쩍이고, 5분 주기에서는 그것이 곧 화면을 가리는 창이 된다. 런처는 pin 인자를 해석하지 않고 전달만 하며 provenance 검증은 기존대로 watchdog이 수행한다. - boot이 web preview 상태를 보고 -SkipWebRestart를 조건부로 붙인다. 무조건 스킵하면 재부팅 직후처럼 vite가 죽은 상태에서 boot 경로로는 web이 영영 복구되지 않았다. hidden trigger는 액션이 wscript 런처를 거치는지 함께 검증하도록 맞췄다.
This commit is contained in:
parent
80bcacc723
commit
5cb530e153
7 changed files with 184 additions and 28 deletions
45
scripts/watch-public-runtime-task.vbs
Normal file
45
scripts/watch-public-runtime-task.vbs
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
' VignettePublicRuntimeWatchdog 작업 스케줄러 액션용 숨김 런처.
|
||||
'
|
||||
' 작업 스케줄러가 powershell.exe 를 직접 실행하면 -WindowStyle Hidden 이어도 conhost
|
||||
' 콘솔 창이 실행 순간 번쩍인다. 워치독은 5분 주기라 그 번쩍임이 계속 화면을 가린다
|
||||
' (2026-08-08/09/12 세 번 반복된 증상). wscript 로 Run(cmd, 0) 하면 창이 아예 생성되지
|
||||
' 않는다. GlassDeck scripts\sync-ai-auth-hidden.vbs 와 동일 패턴이다.
|
||||
'
|
||||
' 이 래퍼는 pin 인자를 해석하지 않는다. 등록된 인자를 그대로 전달만 하고, provenance
|
||||
' 검증(detached HEAD / clean tree / SHA pin)은 watch-public-runtime.ps1 이 수행한다.
|
||||
' 경로를 하드코딩하지 않으므로 stable source root 가 바뀌어도 이 파일은 그대로 쓴다.
|
||||
Option Explicit
|
||||
|
||||
Dim objShell, args, i, arg, cmd, exitCode, dryRun
|
||||
|
||||
Set args = WScript.Arguments
|
||||
If args.Count = 0 Then
|
||||
WScript.Echo "usage: watch-public-runtime-task.vbs -File <watch-public-runtime.ps1> -StableSourceRoot <root> ..."
|
||||
WScript.Quit 2
|
||||
End If
|
||||
|
||||
If LCase(args(0)) = "syntax-only" Then
|
||||
WScript.Quit 0
|
||||
End If
|
||||
|
||||
dryRun = False
|
||||
cmd = "powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden"
|
||||
For i = 0 To args.Count - 1
|
||||
arg = args(i)
|
||||
If i = 0 And LCase(arg) = "print-command" Then
|
||||
dryRun = True
|
||||
ElseIf InStr(arg, " ") > 0 Then
|
||||
cmd = cmd & " """ & arg & """"
|
||||
Else
|
||||
cmd = cmd & " " & arg
|
||||
End If
|
||||
Next
|
||||
|
||||
If dryRun Then
|
||||
WScript.Echo cmd
|
||||
WScript.Quit 0
|
||||
End If
|
||||
|
||||
Set objShell = CreateObject("WScript.Shell")
|
||||
exitCode = objShell.Run(cmd, 0, True)
|
||||
WScript.Quit exitCode
|
||||
Loading…
Add table
Add a link
Reference in a new issue