Solaris
如何等待 Solaris 區域引導(第一次)
索拉里斯 11。
我發現區域引導命令(例如
zoneadm -z myzone boot
)在區域完全引導/配置之前返回。該問題與新創建的區域有關。更確切地說,我所做的是:
zoneadm -z myzone install -c mytemplate.xml zoneadm -z myzone boot
當第二行完成時,系統報告該區域處於執行狀態(技術上是正確的)。實際上,該區域仍在忙於進行清單導入,即進行初始配置。因此,此時不能保證定義的工件
mytemplate.xml
(例如使用者)確實存在。這通常需要一兩分鐘。這是我按腳本創建區域的問題。我顯然可以做很長時間
sleep
,並希望到那時該區域已完成其配置任務,但這似乎是一個愚蠢的解決方案。我不知道還要等多久。有沒有辦法讓我的腳本在我繼續之前確保區域的後台配置過程已經完成?
一種方法是使用執行的 while 循環
zlogin <zone> svcs -xv
或者
zlogin <zone> svcs svc:/milestone/multi-user | grep online
並使用這些命令之一的輸出來確定區域是否已準備好,或者是否要再休眠一會兒。
如果您經常遇到需要手動干預來修復的失敗服務,那麼第二個命令可能會更好,否則您的腳本可能會掛起。您可能還應該有一個超時值,這樣您的腳本就不會永遠等待一個永遠不會滿足您條件的非全域變數。
在我的測試中,當執行輸出失敗的服務的輸出時,我期望一個非零退出程式碼
svcs -xv
,但退出程式碼為零,所以請注意這一點。出於這個原因,如果您使用該zlogin <zone> svcs -xv
命令並且想要測試退出程式碼,則最好執行zlogin <zone> svcs -xv | grep State
. 非零退出程式碼將指示沒有失敗的服務,零退出程式碼將指示一些失敗的服務。