
이것이 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 포함)을 사용하고 있습니다. 내 필요는
- xrdp를 시작합니다(GUI 세션에 연결할 수 있도록).
- eth0 mtu를 1350으로 설정합니다(WSL은 mtu로 인해 VPN에 있는 동안 연결에 문제가 있었습니다).
resolv.conf
업스트림 확인자로 업데이트 (generateResolvConf = false
in 에 관계없이 WSL에서 계속 업데이트됨wsl.config
)
그래서 @NotTheDr01ds의 답변을 확장하기 위해 제가 한 일이 있습니다.
.mystartup.sh
모든 명령을 홈 디렉토리의 새 쉘 스크립트에 넣습니다..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