Windows WSL 부팅시 자동 시작

임재성·2026년 8월 9일

개요

기본적으로 사용하는 Linux 계열의 서버를 사용하지 않고, 특수한 상황이기 때문에 우리는 Windows를 통해서 서비스를 운영하게 되었다.

문제

  • 우리가 제공하는 서비스는 Docker 를 통해서 운영되도록 만들어졌기에 Docker Desktop을 이용하거나 WSL을 통해서 Docker Engine 설치후 이용해야했다.
  • Docker Desktop의 경우 상업적으로 이용하기 위해서는 라이센스를 구매해야 하는 상황이었다.
    라이선스 관련 Docker 링크
  • 때문에 우리는 WSL을 통해서 Docker Engine을 사용하여 운영하기로 결정하였다.
  • 기본적으로 Linux계열의 서버와 사용하는 방식자체가 크게 다르지 않기에 원활하게 설치가 되었다.
  • 여기서 생긴 문제는 Windows의 경우 기본적으로 wsl이 자동시작되지 않고, 로그온을 해야 시작된다는 점이었다.

해결

내가 해결한 방법은 아래와 같다.

부팅 상태 확인

  • 우선 부팅상태를 봐야한다.
    일반적으로 Windows에는 3가지의 부팅형태가 존재한다고 한다.
    완전종료, 최대절전, 빠른시작
  • 이 셋중에 빠른시작이 설정되어있다면 우리가 이 다음 Step에서 하려는 작업등록이 정상적으로 되지 않는다.
  • 빠른시작은 작업 스케줄러의 상태가 종료된 상태로 판단하지 않고, 재부팅시 작업 스케줄러의 트리거가 되는 OnStart 이벤트를 발생시키지 않는다.
  • 그래서 아래와 같이 빠른시작 에 대한 설정을 해제한다.
[PowerShell] 관리자 모드로 시작

Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power" -Name HiberbootEnabled -Value 0

작업 스케줄러 등록

  • 빠른 시작 설정을 해제한 후 부팅시 자동으로 wsl을 시작할 수 있도록 작업 스케줄러를 등록해줘야 한다.
  • 코드는 아래와 같다.
[PowerShell] 관리자 모드로 시작

$taskName = "WSL Ubuntu Boot"
$user = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

Unregister-ScheduledTask `
    -TaskName $taskName `
    -Confirm:$false `
    -ErrorAction SilentlyContinue

$action = New-ScheduledTaskAction `
    -Execute "C:\Windows\System32\wsl.exe" `
    -Argument '-d Ubuntu --exec /bin/sleep infinity'

$trigger = New-ScheduledTaskTrigger -AtStartup

$trigger.Delay = "PT30S"

$principal = New-ScheduledTaskPrincipal `
    -UserId $user `
    -LogonType S4U `
    -RunLevel Highest

$settings = New-ScheduledTaskSettingsSet `
    -StartWhenAvailable `
    -AllowStartIfOnBatteries `
    -DontStopIfGoingOnBatteries `
    -ExecutionTimeLimit ([TimeSpan]::Zero) `
    -RestartCount 3 `
    -RestartInterval (New-TimeSpan -Minutes 1)

Register-ScheduledTask `
    -TaskName $taskName `
    -Action $action `
    -Trigger $trigger `
    -Principal $principal `
    -Settings $settings `
    -Force
  • 위와 같이 설정하면 Win+R 실행후 taskschd.msc 명령을 넣고 실행하라.

코드 상단에 -Argument '-d Ubuntu --exec /bin/sleep infinity' 의 경우 Ubuntu 대신 본인의 wsl 이름을 써야한다.
확인 방법은 wsl -l -v 명령을 cmd에서 실행.

  • 위 내용을 실행 아래와 같이 나오고

    더블클릭시 설정가능 상태가된다.
  • 여기서 작업을 사용할때 사용할 계정은 WSL이 존재하는 계정으로 설정해야한다. WSL의 경우 각계정에서 설치한 상태로 종속되기 때문이다.
  • 이후 재시작해서 wsl -l -v 명령을 실행하면 아래와 같이 상태가 Running이락 되어있다면 올바르게 동작하고 있는것이다.

중요..

  • 재부팅시 재시작이 아니라 전원 끄기 후 수동으로 전원을 키는 방식으로 테스트를 진행해야한다.
profile
조금씩 앞으로

0개의 댓글