索拉里斯 11。
我发现区域启动命令(例如zoneadm -z myzone boot
)在区域完全启动/配置之前返回。该问题与新创建的区域有关。
更准确地说,我所做的是:
zoneadm -z myzone install -c mytemplate.xml
zoneadm -z myzone boot
当第二行完成时,系统报告该区域处于运行状态(这在技术上是正确的)。实际上,该区域仍然忙于进行清单导入,即进行初始配置。因此,此时无法保证中定义的工件mytemplate.xml
(例如用户)实际上存在。这通常需要额外一两分钟的时间。
这是我脚本化创建区域时遇到的问题。显然,我可以做很长时间sleep
,并希望到那时该区域已经完成其配置任务,但这似乎是一个愚蠢的解决方案。我不知道要等多久。
有没有办法让我的脚本确保在继续之前区域的后台配置过程已完成?
答案1
一种方法是使用运行的 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
.非零退出代码将指示没有失败的服务,零退出代码将指示一些失败的服务。
答案2
在 Solaris 10 下新创建区域后,我通常需要登录该区域的控制台来回答一些问题。 zlogin -C <zonename>