시작 시 WSL 실행 서비스

시작 시 WSL 실행 서비스

이것이 WSL의 문제인지 아니면 일반적으로 Ubuntu에서 뭔가 잘못된 일을 하고 있는지는 잘 모르겠지만 시작 시 WSL 시스템에서 cron 서비스를 실행할 수 없습니다.

다음과 같이 잘 시작됩니다.

sudo service cron start

그러나 다음 이후에도 부팅 시 시작되지 않습니다.

sudo update-rc.d cron defaults
sudo update-rc.d cron enable

버전:

$ uname -a
Linux PC-01 4.4.0-18362-Microsoft #476-Microsoft Fri Nov 01 16:53:00 PST 2019 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:        18.04
Codename:       bionic

답변1

방금 요청한 다른 질문에 대한 잠재적인 "중복"을 검색할 때 방금 찾은 오래된 질문입니다. 이것이 "wsl start services"에 대한 첫 번째 검색 결과이므로 여기에 답변을 입력합니다.

거기에현재의대답하고미래답변(현재 사용 가능한 WSL의 Windows 10/11 미리 보기 버전 기준).

현재 대답은 WSL에는 "시작 서비스"라는 개념이 없다는 것입니다. Microsoft의 init프로세스는 "일반" Linux 시스템과 같은 SysVinit도 아니고 Systemd init도 아닙니다.

서비스를 자동으로 시작하려면 다음이 있습니다.현재이를 수행하는 두 가지 방법이 있으며 세 번째 방법은 다음 WSL 릴리스에 제공됩니다.


  • 옵션 1: 로그인 시(부팅 아님) 실행되도록 Windows "예약된 작업" 설정:

    • 작업은 "기본 작업"이 될 수 있습니다.
    • "프로그램 시작"
    • "프로그램"은wsl.exe
    • 그리고 "인수"는 다음과 같아야합니다-u root service cron start

    그러면 로그인 시 루트 사용자(서비스를 시작하는 데 필요)로 WSL이 실행되고 service cron start명령이 실행됩니다. 물론 init.d스크립트가 있는 모든 서비스를 실행하도록 이를 수정할 수 있습니다. WSL에는 프로세스가 백그라운드에서 계속 실행되도록 하려면 사용자가 로그인해야 한다는 요구 사항이 있는 것 같기 때문에 Windows 부팅 시 작업이 실행되도록 예약하는 경우 이 방법은 (적어도 현재) 작동하지 않습니다.


  • 옵션 2: 셸 시작을 수정하여 서비스가 실행 중인지 확인하고 필요한 경우 시작합니다.

    시작 시(일반적으로 ~/.bashrc) 다음 줄을 추가합니다.

    wsl.exe -u root sh -c "service cron status || service cron start"
    

    visudo"일반" Linux에서는 비밀번호 없이 명령을 실행하려면(또는 로그인할 때마다 비밀번호를 입력해야 함) 권한을 스스로 부여 해야 합니다 . wsl.exe -u root에서 사용이내에WSL을 사용하면 이를 우회할 수 있습니다.


  • 옵션 3: Windows 11의 새로운 기능은 파일을 사용하여 WSL에 대한 시작 작업을 지정하는 기능입니다 /etc/wsl.conf. Windows 11을 사용하는 경우 다음 줄을 사용하여 해당 파일을 만듭니다.

    [boot]
    command="service cron start"
    

    에 따르면마이크로소프트 문서, WSL 인스턴스가 시작될 때 루트로 명령을 실행합니다.

    WSL 시작 시 여러 명령을 실행해야 하는 경우 같은 command줄에서 세미콜론으로 구분합니다.

    [boot]
    command="service ssh start; service cron start"
    

답변2

이 게시물은 내가 찾고 있던 것을 얻는 데 도움이 되었지만 여러 명령(xrdp 시작, eth0 mtu 조정, resolv.conf 업데이트)을 실행해야 하고 wsl.exe여러 번 실행하면 여러 루트 로그인이 인스턴스화되어 WSL이 일부 작업을 수행하기 때문에 파일 잠금에 문제가 발생할 resolv.conf수 있습니다. 로그인할 때마다 설정합니다. 긍정적이지 않습니다.

저는 wsl2 커널 버전: 5.10.102.1 Windows 10(Ubuntu 20.04.5 LTS 포함)을 사용하고 있습니다. 내 필요는

  1. xrdp를 시작합니다(GUI 세션에 연결할 수 있도록).
  2. eth0 mtu를 1350으로 설정합니다(WSL은 mtu로 인해 VPN에 있는 동안 연결에 문제가 있었습니다).
  3. resolv.conf업스트림 확인자로 업데이트 ( generateResolvConf = falsein 에 관계없이 WSL에서 계속 업데이트됨 wsl.config)

그래서 @NotTheDr01ds의 답변을 확장하기 위해 제가 한 일이 있습니다.

  1. .mystartup.sh모든 명령을 홈 디렉토리의 새 쉘 스크립트에 넣습니다.
  2. .mystartup.sh다음에서 루트로 호출.profile

여기에 내가 추가한 내용이 있습니다..profile

# startup stuff
# run startup script as root
wsl.exe -u root /home/user/.mystartup.sh

그리고 여기는.mystartup.sh

# startup stuff
# service xrdp start
service xrdp status || service xrdp start

# setup lower mtu for vpn links
ifconfig eth0 mtu 1350
echo "eth0 mtu updated!"

# remove link to /run/resolvconf/resolv.conf & create new
rm -f /etc/resolv.conf
touch /etc/resolv.conf
chmod u+rwx,g+rwx,o+rx /etc/resolv.conf

# setup nameservers
echo "# this resolv.conf created using user .profile script" >> /etc/resolv.conf
echo "# wsl auto-generate must be disabled in /etc/wsl.config" >> /etc/resolv.conf
echo "nameserver 10.0.0.50" >> /etc/resolv.conf
echo "nameserver 10.0.0.51" >> /etc/resolv.conf
echo "resolv.conf modified with custom dns resolvers!"
echo

관련 정보