這不是什麼大問題的Ubuntu 14.04之下,但由於切換到16.04事情變得有點凌亂:如何確保新啓動的虛擬機已準備好進行配置?
當我使用工具來啓動一個新的虛擬機並運行腳本配置(認爲流浪或包裝機)劇本所做的第一件事之一就是舞蹈apt-get update
/upgrade
/install
。因爲切換到Ubuntu Xenial這些腳本都扔了很多不確定性的錯誤一樣
Reading package lists...
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
和
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
我發現如果我把一個sleep 30
或在腳本的開頭類似它似乎安定下來。如果我在重試的循環中嘗試每個命令,直到退出狀態爲0
,它也可以工作。最好我可以看到,有一些首次啓動任務在我的供應商同時運行apt-get。
我認爲這是明顯的東西,就像apt-daily服務一樣。但是添加下面的等待循環沒有任何效果;它永遠不會等待任何東西:
while systemctl status apt-daily.service > /dev/null 2>&1; do
sleep 0.5
done
我知道我可以按照想法this question檢查一個恰當的鎖定。具體而言,但我如果有確定何時更通用和防彈方式更感興趣一個新的VM已經完全出現了。做一個瞎子sleep
好像太脆弱了。