update.sh를 다음과 같이 생성했습니다.
#!/bin/bash
sudo apt-get update
sudo apt-get upgrade
echo "Updated Successfully!
매시간 이 스크립트를 실행하기 위해 다음 crontab 작업을 만들었습니다.
0 * * * * bash /home/ubuntu/update.sh >> /home/ubuntu/cron_test.txt
그러나 echo 명령에 대한 로그 파일 항목만 생성되고(1분마다 실행하려고 시도하기 때문에) 내 bash가 업데이트되고 있다는 확인은 없습니다. 나는 WSL2와 VMWare Ubuntu 터미널 모두에서 이것을 시도했습니다. WSL에서는 에코 실행 항목도 기록하지 않습니다. 무엇이 문제일까요?
답변1
두 가지 질문이 있습니다:
이는
sudo
비밀번호를 묻는 메시지가 표시되고 비밀번호는 제공되지 않음을 의미합니다. 그래서 그냥 거기에 매달릴 것입니다. 간단한 해결책은 루트를 사용cron
하거나sudo crontab -e
루트 사용자에게 항목을 추가하여/etc/cron.crontab
.sudo
apt 명령 자체도 를 실행할 때 설치를 확인해야 한다는 메시지를 표시합니다
apt upgrade
. 를 실행하여 이 문제를 해결할 수도 있습니다apt upgrade -y
.
이제 위의 "해결책" 중 어느 것도 좋지 않습니다. 대신에 다음 중 하나를 사용하지 마십시오.무인 업그레이드 설치, 이를 수행하도록 설계된 도구를 사용하면 됩니다.
답변2
몇 가지 문제에 직면해 있습니다. 둘 다 기본적으로 Systemd를 실행하는 WSL에 뿌리를 두고 있습니다(또는 쉽지는 않습니다). 이 내용은 기사에서 자세히 다룹니다.우분투 답변 물어보기또 다른뿌리, 따라서 여기서는 이 문제에 대해 깊이 논의하지 않겠습니다.
그러나 Systemd가 없으면:
unattended-upgrades
댓글과 다른 답변에서 제안된 은 작동하지 않습니다.cron
일반적으로 Ubuntu에서도 Systemd에 의해 시작되므로 다른 방법으로 시작 해야 합니다 . 귀하의 의견을 바탕으로:에코 실행 항목도 기록하지 않습니다.
cron
... WSL에서 예상되는 전혀 실행되지 않는 것 같습니다 .
그러나 가능한 솔루션을 제안하기 전에 WSL 인스턴스에서는 이 작업을 수행하면 안 된다는 점을 제안합니다. WSL 인스턴스는 장기간 실행되는 상시 실행 환경으로 설계되지 않았습니다. 배포판을 실행하는 Docker 컨테이너와 비슷합니다. 그래서 저는 항상 백그라운드에서 업그레이드 중단이 발생하는 것을 걱정합니다. 호스트 운영 체제 wsl --shutdown
(또는 호스트 운영 체제) 또는 다양한 요인 --terminate
을 포함하여 다양한 요인 중 하나로 인해 백그라운드/무인 업그레이드 중에 WSL 인스턴스가 중지될 수 있습니다 .
물리적/가상 머신에서는 다음 unattended-upgrade-shutdown
을 수행할 수 있습니다.무인 업그레이드가 완료될 때까지 종료를 비활성화합니다.. 그러나 이는 WSL에서는 불가능합니다. 즉, Apt 데이터가 손상되기 쉽습니다.
apt upgrade
이는 프로세스에서 실행될 때도 발생합니다 cron
.
그냥 수동으로 실행하는 것이 좋습니다 sudo apt update && sudo apt upgrade -y
. 기본 MOTD는 필요할 때 어느 정도 경고합니다.
WSL에서 실행 하는 경우 cron
몇 가지 다른 방법으로 자동화를 달성할 수 있습니다. 권장되는 방법은 boot.command
사용 가능한 구성 설정이 있는 Windows 11입니다.
Windows 10을 사용하는 경우 다음을 다음 항목에 추가할 수 있습니다 ~/.bashrc
.
wsl.exe -u root service cron status > /dev/null || wsl.exe -u root service cron start > /dev/null
이 wsl.exe
명령을 사용하여 비밀번호 없이 루트로 실행합니다.
보다이 슈퍼유저의 답변거기에서 두 가지 기술을 더 자세히 다룹니다.