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