如何等待 Solaris 区域引导(第一次)

如何等待 Solaris 区域引导(第一次)

索拉里斯 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>

相关内容