이전에 WSL이 자동종료되는 문제를 방지하기 위해서 여러가지 시도를 했었고 블로그 포스팅도 했었습니다. 이전 방법으로 문제가 해결되었다고 생각했지만 시간이 오래 지나고 나서 동일한 문제가 발생하기 시자했습니다.
또다른 해결책입니다. 아직까지 괜찮지만 또 문제가 생기면 다른 방법도 포스팅하겠습니다.
WSL 자동 종료 문제의 원인
WSL2는 유휴 상태(idle)일 때 자동으로 종료되어 리소스를 절약하도록 설계되어 있습니다. nginx 같은 백그라운드 서비스가 실행 중이라도 인터랙티브 프로세스가 없으면 종료될 수 있습니다.
.wslconfig로 유휴 시간 설정하기
Windows 사용자 프로필 디렉토리(%UserProfile%)에 .wslconfig 파일을 생성하고 다음과 같이 설정합니다.
[wsl2] vmIdleTimeout=-1
이 설정을 추가하면 VM이 유휴 상태에서 종료되지 않도록 할 수 있습니다. 변경 후에는 PowerShell에서 wsl --shutdown을 실행한 다음 WSL을 재시작해주세요.
참고로 이 설정은 모든 WSL2 배포에 적용되며, 기본값은 60000ms(60초)입니다.
Keep Alive 프로세스 실행하기
WSL 내에서 nohup sleep infinity & 또는 dbus-launch true & 같은 무한 루프 스크립트를 백그라운드로 실행하여 인터랙티브 프로세스로 유지할 수 있습니다.
이를 .bashrc에 추가하거나 systemd 서비스로 등록하면 nginx가 종료 후에도 WSL이 살아있게 됩니다. Docker나 cron 같은 다른 데몬도 유사하게 도움이 될 수 있습니다.
nginx 서비스 자동 시작 설정하기
/etc/wsl.conf의 [boot] 섹션에 다음과 같이 설정해주세요:
[boot] command=service nginx start
WSL 시작 시 nginx를 자동 실행하게 됩니다.
만약 systemd가 활성화된 경우에는 [boot] 섹션에 systemd=true를 추가하고 systemctl enable nginx로 영구 설정하시면 됩니다. 변경 후에는 wsl --shutdown으로 재시작해주세요.
이러한 방법들을 활용면 WSL 환경에서 nginx를 안정적으로 자동 실행할 수 있습니다.