我已经为应用程序创建了一项服务,并且我希望该应用程序在启动时启动。在服务清单中,我意识到有一个属性(enabled =“true”),但我一直在避免这个特别烦人的方面:
导入是脚本的一部分。将服务设置为“启用”意味着它将在导入时重新启动。问题是我不确定如何等到该进程启用后再继续。因此,我在脚本中所做的是将启用设置为“false”的导入,然后运行“svcadm enable -s <service>
”。
所以我想知道是否有人对以下问题有任何答案:
- 如何使现有服务在启动时启动(希望避免手动添加到 rc3.d)?
- 如何让 svccfg import 等到服务完全启用后再继续?
- 是否有一种优雅的方法可以等到服务启动后再继续(避免在循环中手动 grep 启用)?
谢谢。
答案1
我将尝试回答您有关 Solaris SMF 的问题...
要在启动时启动服务,您必须简单地启用该服务
# svcadm enable FRMI
例如,要启用服务“ipfilter”,您需要
# svcadm enable ipfilter
这将在当前里程碑上启用,因此无需对
/etc/rcX.d
目录进行任何更改我不明白为什么你需要导入过程来等待其他一些 frmi,但是,我通常导入“清单”,然后将其放在网上
svcadm
,例如# svccfg validate MANIFEST # svcadm enable FRMI
要等待其他 frmi,您可以使用清单中的“依赖项”选项,如下所示
<dependency name='filesystem-local' grouping='require_all' restart_on='none' type='service'> <service_fmri value='svc:/system/filesystem/local:default' /> </dependency>
我在我的博客(西班牙语)中有很多关于如何安装和使用 Solaris SMF 的示例,但是,例如,在这里您可以看到一个示例, 如何在 OpenIndiana 上安装 PostgreSQL 9.0.3或者如何在 OpenIndiana 上使用 RBAC 和 SMF 安装 Apache Tomcat
答案2
也许您可以通过使您的服务依赖于另一个尚未启用的服务来解决这个问题。