File size: 2,368 Bytes
9d377df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9fa456d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ„œλ²„λ₯Ό 계속 μ‹€ν–‰ν•˜λŠ” 슀크립트
$ErrorActionPreference = "Continue"
$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location $scriptPath

# 둜그 파일 경둜
$logFile = Join-Path $scriptPath "server.log"

function Write-Log {
    param([string]$Message)
    $timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
    $logMessage = "[$timestamp] $Message"
    Write-Host $logMessage
    Add-Content -Path $logFile -Value $logMessage
}

function Start-ServerProcess {
    Write-Log "μ„œλ²„ ν”„λ‘œμ„ΈμŠ€ μ‹œμž‘ 쀑..."
    
    $processInfo = New-Object System.Diagnostics.ProcessStartInfo
    $processInfo.FileName = "python"
    $processInfo.Arguments = "run.py"
    $processInfo.WorkingDirectory = $scriptPath
    $processInfo.UseShellExecute = $false
    $processInfo.RedirectStandardOutput = $true
    $processInfo.RedirectStandardError = $true
    $processInfo.CreateNoWindow = $true
    
    $process = New-Object System.Diagnostics.Process
    $process.StartInfo = $processInfo
    
    # 좜λ ₯ λ¦¬λ‹€μ΄λ ‰μ…˜
    $process.add_OutputDataReceived({
        param($sender, $e)
        if ($e.Data) {
            Write-Log $e.Data
        }
    })
    
    $process.add_ErrorDataReceived({
        param($sender, $e)
        if ($e.Data) {
            Write-Log "ERROR: $($e.Data)"
        }
    })
    
    $process.Start() | Out-Null
    $process.BeginOutputReadLine()
    $process.BeginErrorReadLine()
    
    return $process
}

# 메인 루프
Write-Log "=== μ„œλ²„ μžλ™ μž¬μ‹œμž‘ 슀크립트 μ‹œμž‘ ==="

while ($true) {
    $process = $null
    try {
        $process = Start-ServerProcess
        Write-Log "μ„œλ²„ ν”„λ‘œμ„ΈμŠ€ μ‹œμž‘λ¨ (PID: $($process.Id))"
        
        # ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ λŒ€κΈ°
        $process.WaitForExit()
        
        $exitCode = $process.ExitCode
        Write-Log "μ„œλ²„ ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œλ¨ (Exit Code: $exitCode)"
        
        # ν”„λ‘œμ„ΈμŠ€ 정리
        if (!$process.HasExited) {
            $process.Kill()
        }
        $process.Dispose()
    }
    catch {
        Write-Log "였λ₯˜ λ°œμƒ: $_"
        if ($process -and !$process.HasExited) {
            try {
                $process.Kill()
            } catch {}
        }
    }
    
    Write-Log "5초 ν›„ μ„œλ²„λ₯Ό μž¬μ‹œμž‘ν•©λ‹ˆλ‹€..."
    Start-Sleep -Seconds 5
}