# 백그라운드에서 서버를 계속 실행하는 스크립트 $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 }