일부 설치가 포함된 새 가상 머신을 설정하기 위한 스크립트를 만들려고 하는데 설치 명령( apt-get --yes install <package>
)을 스크립트에 넣으면 항상 실패합니다.
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
sudo ./setup.sh
스크립트는 루트( )로 실행됩니다.
apt
프로세스를 확인하면 다음과 같은 결과를 얻습니다.
4 S root 2227 1 0 80 0 - 1126 - 07:33 ? 00:00:00 /bin/sh /usr/lib/apt/apt.systemd.daily update
0 S root 2231 2227 0 80 0 - 1126 - 07:33 ? 00:00:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held update
문제는 이것이 스크립트에서 apts를 실행할 때만 발생한다는 것입니다. 동일한 명령을 수동으로 실행하면 이 문제가 발생하지 않습니다. 쉘 스크립트가 apt install을 다르게 실행합니까?
apt
어쨌든 설치 프로그램을 잠그지 yum
않고 쉘 스크립트에서 설치 프로그램을 실행하는 가장 좋은 방법은 무엇입니까 ?
답변1
sudo apt-get install <package> -y
스크립트에 작성해야 합니다 . 스크립트 실행./setup.sh
하지만 물론 사용자는 sudoer(sudo 액세스)여야 합니다.
답변2
이는 설치 후 bash 스크립트를 추가로 실행하거나 이러한 프로세스 이름이 존재하지 않을 때까지 기다려야 함을 알려줍니다(apt는 잠금을 얻을 수 없습니다). 당신은 그것에 대해 악의적으로 프로세스를 종료하고 잠금 파일을 삭제한 다음 업데이트를 적절하게 받거나 완료될 때까지 기다릴 수 있습니다.
실패를 유발할 수 있는 것 - apt-get을 실행하면 다른 패키지를 설치하는 도중에 무언가를 설치합니다(이렇게 하지 말고 종속성을 사용하십시오).