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(서비스를 시작하는 데 필요함)이 실행되고 root 로 로그인된 동안 명령이 실행됩니다 service cron start. 물론 init.d스크립트를 사용하여 모든 서비스를 실행하도록 수정할 수 있습니다. Windows가 시작될 때 작업이 실행되도록 예약하는 경우 이 방법은 (적어도 지금은) 작동하지 않습니다. WSL은 프로세스를 백그라운드에서 계속 실행하려면 사용자가 로그인해야 하는 것처럼 보이기 때문입니다.


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

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

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

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


  • 옵션 3: Windows 11의 새로운 기능은 이 /etc/wsl.conf파일을 사용하여 WSL의 시작 작업을 지정하는 기능입니다. 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여러 번 실행하면 여러 루트 로그인이 인스턴스화되어 파일 잠금이 발생합니다. 몇 가지 문제가 있습니다. resolv.conf아마도 WSL 때문일 것입니다. 로그인할 때마다 뭔가를 설정하는데, 긍정적이지 않습니다.

저는 wsl2 커널 버전인 5.10.102.1 Windows 10 및 Ubuntu 20.04.5 LTS를 사용하고 있습니다. 내 필요는

  1. xrdp를 시작합니다(GUI 세션에 연결할 수 있도록).
  2. eth0 mtu를 1350으로 설정합니다(WSL은 mtu로 인해 VPN을 사용할 때 연결 문제가 있음).
  3. 업스트림 확인자를 사용하여 업데이트됨( resolv.confin에 관계없이 WSL을 통해 지속적으로 업데이트됨)generateResolvConf = falsewsl.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

관련 정보