WSL Ubuntu가 꺼져도 자동으로 재시작되도록 설정하는 방법
요약
Windows 환경에서 WSL2 Ubuntu가 종료되어 서비스가 멈추는 문제를 해결하기 위해 작업 스케줄러를 이용한 자동 재시작 방법을 제시합니다. PowerShell의 무한 루프와 `wsl.exe`를 활용하여 Keep-Alive 기능을 구현하며, 근본적인 서비스 관리를 위해서는 `/etc/wsl.conf`에서 systemd 활성화가 권장됩니다.
핵심 포인트
- 작업 스케줄러에 무한 루프를 설정하여 WSL의 자동 복구(Keep-Alive)를 구현합니다.
- `wsl.exe --exec sleep infinity`가 생존 감시 및 상주 프로세스 역할을 합니다.
- 시스템 서비스는 `/etc/wsl.conf`에서 systemd를 활성화하는 것이 가장 확실한 방법입니다.
- 작업 스케줄러의 기본 제한 시간(72시간)과 메모리 부족 등 근본 원인 점검이 필요합니다.
Windows 환경에서 WSL2의 Ubuntu를 상시 구동하고 있습니다.
다만, 가끔씩 종료되는 경우가 발생합니다. 알아차리지 못한 채 방치하다 보니 내부 서비스가 멈춰 있는 상황이 몇 번 있었습니다.
원인 조사도 중요하지만, 우선은 꺼져도 스스로 복구하는 상태를 만드는 것을 목표로 했습니다.
방법은 간단합니다.
- 작업 스케줄러(Task Scheduler)에서 로그온 시 PowerShell을 실행하도록 설정합니다.
- 그 안에서 다음 코드를 실행하여 무한 루프를 만듭니다:
wsl.exe
이 wsl.exe는 sleep infinity로 대기 상태를 유지합니다.
WSL이 종료되면 wsl.exe도 함께 종료됩니다. 이 루프는 10초 간격으로 기다린 후, Ubuntu를 다시 시작합니다.
즉, wsl.exe 프로세스 자체가 생존 감시(Keep-Alive) 역할을 겸하게 됩니다.
부작용도 있습니다. WSL은 프로세스가 아무것도 실행하지 않으면 일정 시간이 지나면 자동으로 중지됩니다. 상주 프로세스를 두게 되면, 임의로 멈추는 일은 없어집니다.
PowerShell에서 실행합니다 (환경에 따라 관리자 권한이 필요할 수 있습니다).
배포판 이름은 wsl -l -v로 확인하여 필요한 경우 수정해 주세요.
$cmd = 'while ($true) { wsl.exe -d Ubuntu-24.04 --exec sleep infinity; Start-Sleep 10 }'
$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-NoProfile -WindowStyle Hidden -Command `"$cmd`""
$trigger = New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME
...
일부러 WSL을 종료해 보겠습니다.
wsl --shutdown
10~15초 정도 기다린 후, 상태를 확인합니다.
wsl -l -v
Running으로 돌아와 있다면 성공입니다.
작업 스케줄러는 기본적으로 72시간이 지나면 작업을 강제 종료합니다.
이 점을 잊으면, 3일 후에 감시가 조용히 멈춥니다.
WSL의 배포판은 사용자별로 등록됩니다.
SYSTEM 계정으로 실행하면, 목적의 Ubuntu를 찾지 못할 수 있습니다.
이 메커니즘은 Ubuntu 본체에만 적용됩니다. 서비스를 자동으로 시작하고 싶다면, /etc/wsl.conf에서 systemd를 활성화합니다.
[boot]
systemd=true
그 후 sudo systemctl enable <서비스명>을 해주면, Ubuntu가 시작될 때 함께 올라옵니다.
만약 wsl.exe가 종료되지 않고 멈추는(hang) 경우가 감지된다면, 주기적으로 wsl --exec true를 실행하는 별도의 상태 점검(Health Check)을 추가해야 합니다.
또한, 이는 임시방편에 불과합니다. 메모리 부족이 원인이라면 %USERPROFILE%\.wslconfig의 memory / swap 등을 검토하여 근본적인 대응도 병행하는 것이 좋습니다.
더 이상 필요 없다면 삭제할 수 있습니다.
Unregister-ScheduledTask -TaskName WSL-KeepAlive -Confirm:$false
요약하자면 다음과 같습니다.
- 작업 스케줄러 + 무한 루프를 통해, WSL이 꺼져도 자동 복구 가능
wsl.exe --exec sleep infinity가 생존 감시와 상주 역할을 모두 수행함ExecutionTimeLimit을 0으로 설정하지 않으면 72시간 후 중지됨 - 내부 서비스는 systemd로 자동 시작- 근본 원인 조사는 별도로 필요합니다.
구조 자체는 매우 평범하지만, **
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기