WSL ubuntu 자동실행 on windows start

WSL Ubuntu를 자동으로 시작하는 가장 일반적이고 권장되는 방법은 **Windows 작업 스케줄러(Task Scheduler)**를 이용하는 것입니다. 이를 통해 Windows가 시작될 때마다 원하는 WSL 명령어를 실행할 수 있습니다.


1. Windows 작업 스케줄러를 이용한 WSL Ubuntu 자동 실행

이 방법은 Windows 부팅 시 특정 WSL 배포판을 실행하고, 그 안에서 필요한 스크립트나 서비스를 자동으로 시작하는 데 사용됩니다.

단계별 설정 방법:

  1. 작업 스케줄러 열기:
    • Windows 검색창에 “작업 스케줄러”를 입력하여 실행합니다.
  2. 새 작업 만들기:
    • 작업 스케줄러 창의 오른쪽 패널에서 “작업 만들기…”를 클릭합니다.
  3. 일반 탭 설정:
    • 이름(N): 원하는 작업 이름을 입력합니다. (예: WSL_Ubuntu_AutoStart)
    • 설명(D): 작업에 대한 설명을 입력합니다. (선택 사항)
    • 사용자 또는 그룹 변경(C)…:
      • “사용자 또는 그룹 변경” 버튼을 클릭합니다.
      • 사용자 이름에 SYSTEM을 입력하고 “이름 확인”을 클릭한 후 확인을 누릅니다. (SYSTEM 계정은 사용자가 로그인하지 않아도 Windows 시작 시 작업을 실행할 수 있습니다. 특정 사용자 계정으로 로그인한 후에만 실행하려면 해당 사용자 계정을 선택합니다.)
    • 사용자가 로그온할 때만 실행(O) 또는 사용자 로그온 여부와 관계없이 실행(U):
      • 백그라운드에서 서비스처럼 작동해야 한다면 사용자 로그온 여부와 관계없이 실행(U)을 선택하는 것이 좋습니다.
    • 가장 높은 권한으로 실행(I): 이 항목에 체크합니다.
    • 구성(F): “Windows 10” (또는 현재 사용 중인 Windows 버전에 맞춰)을 선택합니다.
  4. 트리거 탭 설정:
    • “새로 만들기(N)…” 버튼을 클릭합니다.
    • 작업 시작(G): 드롭다운 메뉴에서 “시작 시(At startup)” 또는 “로그온 시(At logon)”를 선택합니다.
      • 시작 시: Windows 부팅과 함께 작업을 시작합니다. (로그인 전)
      • 로그온 시: 특정 사용자가 Windows에 로그인할 때 작업을 시작합니다.
      • 대부분의 경우 시작 시를 선택하는 것이 좋습니다.
    • “확인”을 클릭합니다.
  5. 동작 탭 설정:
    • “새로 만들기(N)…” 버튼을 클릭합니다.
    • 동작(T): “프로그램 시작”을 선택합니다.
    • 프로그램/스크립트(P): wsl.exe를 입력합니다.
    • 인수 추가(선택 사항)(A): 여기에 WSL Ubuntu를 실행하고 백그라운드 명령을 수행하는 핵심 인수를 입력합니다.-d Ubuntu -u <USERNAME> /bin/bash -c "서비스_시작_명령_또는_스크립트 &"
      • -d UbuntuUbuntu 배포판을 지정합니다. (설치된 배포판 이름이 다르면 변경하세요.)
      • -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 &"
      • 마지막의 & 기호는 이 명령이 백그라운드에서 실행되도록 합니다.
    • “확인”을 클릭하고 “작업 만들기” 창도 “확인”을 클릭하여 작업을 저장합니다.

주의사항:

  • 서비스 시작 시 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 인스턴스를 종료한 후 다시 시작해야 합니다.
error: Content is protected !!