WSL Ubuntu를 자동으로 시작하는 가장 일반적이고 권장되는 방법은 **Windows 작업 스케줄러(Task Scheduler)**를 이용하는 것입니다. 이를 통해 Windows가 시작될 때마다 원하는 WSL 명령어를 실행할 수 있습니다.
1. Windows 작업 스케줄러를 이용한 WSL Ubuntu 자동 실행
이 방법은 Windows 부팅 시 특정 WSL 배포판을 실행하고, 그 안에서 필요한 스크립트나 서비스를 자동으로 시작하는 데 사용됩니다.
단계별 설정 방법:
- 작업 스케줄러 열기:
- Windows 검색창에 “작업 스케줄러”를 입력하여 실행합니다.
- 새 작업 만들기:
- 작업 스케줄러 창의 오른쪽 패널에서 “작업 만들기…”를 클릭합니다.
- 일반 탭 설정:
- 이름(N): 원하는 작업 이름을 입력합니다. (예:
WSL_Ubuntu_AutoStart) - 설명(D): 작업에 대한 설명을 입력합니다. (선택 사항)
- 사용자 또는 그룹 변경(C)…:
- “사용자 또는 그룹 변경” 버튼을 클릭합니다.
- 사용자 이름에
SYSTEM을 입력하고 “이름 확인”을 클릭한 후 확인을 누릅니다. (SYSTEM계정은 사용자가 로그인하지 않아도 Windows 시작 시 작업을 실행할 수 있습니다. 특정 사용자 계정으로 로그인한 후에만 실행하려면 해당 사용자 계정을 선택합니다.)
- 사용자가 로그온할 때만 실행(O) 또는 사용자 로그온 여부와 관계없이 실행(U):
- 백그라운드에서 서비스처럼 작동해야 한다면
사용자 로그온 여부와 관계없이 실행(U)을 선택하는 것이 좋습니다.
- 백그라운드에서 서비스처럼 작동해야 한다면
- 가장 높은 권한으로 실행(I): 이 항목에 체크합니다.
- 구성(F): “Windows 10” (또는 현재 사용 중인 Windows 버전에 맞춰)을 선택합니다.
- 이름(N): 원하는 작업 이름을 입력합니다. (예:
- 트리거 탭 설정:
- “새로 만들기(N)…” 버튼을 클릭합니다.
- 작업 시작(G): 드롭다운 메뉴에서 “시작 시(At startup)” 또는 “로그온 시(At logon)”를 선택합니다.
시작 시: Windows 부팅과 함께 작업을 시작합니다. (로그인 전)로그온 시: 특정 사용자가 Windows에 로그인할 때 작업을 시작합니다.- 대부분의 경우
시작 시를 선택하는 것이 좋습니다.
- “확인”을 클릭합니다.
- 동작 탭 설정:
- “새로 만들기(N)…” 버튼을 클릭합니다.
- 동작(T): “프로그램 시작”을 선택합니다.
- 프로그램/스크립트(P):
wsl.exe를 입력합니다. - 인수 추가(선택 사항)(A): 여기에 WSL Ubuntu를 실행하고 백그라운드 명령을 수행하는 핵심 인수를 입력합니다.
-d Ubuntu -u <USERNAME> /bin/bash -c "서비스_시작_명령_또는_스크립트 &"-d Ubuntu:Ubuntu배포판을 지정합니다. (설치된 배포판 이름이 다르면 변경하세요.)-u <USERNAME>: WSL에서 명령을 실행할 사용자 이름을 지정합니다. (예:root또는 사용자 계정 이름)/bin/bash -c "...": 이 부분은 WSL 내부에서 실행될 명령입니다.- 서비스 시작 예시 (Apache2 웹 서버):
-d Ubuntu -u root /bin/bash -c "service apache2 start && tail -f /var/log/apache2/access.log &"(tail -f는 WSL이 종료되지 않도록 백그라운드에서 로그 파일을 계속 모니터링하는 예시입니다.) - n8n 또는 다른 애플리케이션 실행 예시:
-d Ubuntu -u <USERNAME> /bin/bash -c "/usr/local/bin/n8n start --tunnel &"(n8n의 경로가 다를 수 있습니다.) - 자신만의 스크립트 실행 예시: 먼저 WSL Ubuntu 내부에 실행할 스크립트 파일(예:
/home/<USERNAME>/startup.sh)을 만들고 실행 권한을 부여합니다.#!/bin/bash service apache2 start /usr/local/bin/n8n start --tunnel # 기타 필요한 모든 시작 명령어를 이곳에 추가합니다.그리고 작업 스케줄러에는 다음과 같이 입력합니다.-d Ubuntu -u <USERNAME> /bin/bash -c "/home/<USERNAME>/startup.sh &"
- 서비스 시작 예시 (Apache2 웹 서버):
- 마지막의
&기호는 이 명령이 백그라운드에서 실행되도록 합니다.
- “확인”을 클릭하고 “작업 만들기” 창도 “확인”을 클릭하여 작업을 저장합니다.
주의사항:
- 서비스 시작 시
sudo문제:wsl명령어에서-u root를 사용하여 루트 권한으로 실행하거나, 스크립트 내부에서sudo명령을 사용해야 할 경우 비밀번호 입력 문제가 발생할 수 있습니다. 이 경우sudoers파일을 편집하여 특정 명령에 대해 비밀번호 없이sudo를 허용하는 설정을 추가할 수 있습니다. (예:username ALL=(ALL) NOPASSWD: /usr/sbin/service apache2 start) 하지만 이는 보안상 주의해야 합니다. - WSL 서비스 관리: WSL2의 경우
systemd가 정식으로 지원되므로, 서비스 관리가 훨씬 쉬워졌습니다.$ wsl --update명령어로 최신 버전을 유지하는 것이 좋습니다.
2. VBScript를 이용한 자동 실행 (선택적 방법)
일부 사용자는 VBScript를 활용하여 WSL 자동 실행을 설정하기도 합니다. 이 방법은 스크립트 파일을 만들어 shell:startup 폴더에 넣거나 작업 스케줄러에서 VBScript를 실행하는 방식입니다.
wsl-autostart.vbs 파일 내용 예시:
vbs
Set oShell = CreateObject("WScript.Shell")
oShell.Run "wsl -d Ubuntu -u your_username /path/to/your/startup_script.sh", 0, false
- 위 VBScript를
wsl-autostart.vbs로 저장하고, Windows 시작 폴더 (shell:startup입력 후 이동)에 복사해 넣으면 Windows 로그인 시 자동으로 실행됩니다.0, false는 창을 띄우지 않고 백그라운드에서 실행하라는 의미입니다.
3. 백그라운드 실행 및 WSL 인스턴스 유지
wsl.exe는 기본적으로 백그라운드 실행:wsl.exe자체는 실행 시 별도의 콘솔 창을 유지하지 않고 백그라운드에서 리눅스 인스턴스를 시작합니다.- WSL2 인스턴스 자동 종료 방지 (
vmIdleTimeout): WSL2는 리소스 효율성을 위해 모든 프로세스가 종료되면 일정 시간 후 자동으로 가상 머신을 종료합니다. 이를 방지하고 WSL 인스턴스를 계속 실행 상태로 유지하려면~/.wslconfig파일에vmIdleTimeout설정을 추가하여 유휴 시간을 늘릴 수 있습니다.- Windows의 사용자 프로필 폴더(
C:\Users\<YourUsername>)에.wslconfig파일을 생성하거나 편집합니다. - 파일 내용을 다음과 같이 추가합니다.
[wsl2] # WSL2 가상 머신이 유휴 상태가 된 후 종료될 때까지 기다릴 시간(분) # 0으로 설정하면 유휴 상태라도 종료되지 않습니다. vmIdleTimeout=0 - 설정을 적용하려면
wsl --shutdown명령으로 모든 WSL 인스턴스를 종료한 후 다시 시작해야 합니다.
- Windows의 사용자 프로필 폴더(
