Windows WSL2 자동 시작 설정

파워쉘 프로그램 코드

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {   
  $arguments = "& '" + $myinvocation.mycommand.definition + "'"
  Start-Process powershell -Verb runAs -ArgumentList $arguments
  Break
}

$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';

if ( $found ) {
  $remoteport = $matches[0];
}
else {
  Write-Output "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}

$ports = @(22, 80, 443, 3306);

Invoke-Expression "netsh interface portproxy reset";

for ( $i = 0; $i -lt $ports.length; $i++ ) {
  $port = $ports[$i];
  Invoke-Expression "netsh interface portproxy add v4tov4 listenport=$port connectport=$port connectaddress=$remoteport";
}

Invoke-Expression "netsh interface portproxy show v4tov4";

파워쉘 파일을 작업 스케줄러에 등록을 합니다. 저는 c:\wsl_config 폴더 아래에 “wsl_port_forwarding.ps1” 로 만들어서 사용을 합니다. 동작 속성을 다음과 같이 설정을 하시면 됩니다.

프로그램 스크립트 : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

인수 추가(옵션) : -ExecutionPolicy Bypass -File .\wsl_port_forwarding.ps1

시작 위치(옵션) : C:\wsl_config

BAT 파일

@echo off
"C:\Windows\System32\bash.exe" -c "sudo service ssh start"
"C:\Windows\System32\bash.exe" -c "sudo service cron start"
"C:\Windows\System32\bash.exe" -c "sudo service apache2 start"
"C:\Windows\System32\bash.exe" -c "sudo service mysql start"
wsl -u root -- service ssh start

BAT 파일도 작업스케줄러에 등록을 합니다. BAT 파일도 C:\wsl_config 폴더 아래에 “wsl_service_start.bat” 파일을 생성하고 등록을 해줍니다.

위에 방법으로도 BAT 파일을 실행을 할 수 있지만, 불안한 부분이 있어서 2중으로 처리를 하기 위해서 작업 스케줄을 통해서 2차로 실행을 할 수 있도록 등록을 하였습니다.

작업 스케줄의 작업 설정을 통해서 bash를 통해서 wsl에 바로 명령어를 실행을 할 수도 있습니다.

프로그램/스크립트 : C:\Windows\System32\bash.exe

인수 추가(옵션) : -c “sudo service ssh start”

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다