手册页部分 1M: 系统管理命令

退出打印视图

更新时间: 2014 年 7 月
 
 

svcbundle(1M)

名称

svcbundle - 创建 SMF 服务束

用法概要

svcbundle [-i | -o output_file] -s name=value...
svcbundle help [name]

描述

svcbundle 命令用于生成 SMF 清单。此清单是通过多个 –s 选项指定的。要生成清单,必须指定 service-namestart-method。其他 NV 对是可选的,允许用户为服务指定更多详细信息。svccfg(1M) 用于验证命令是否会对生成的清单运行,以检测任何模板冲突。

还可使用 svcbundle 生成配置文件。请参见下文的 bundle-type

第二个用法概要会在标准输出上显示帮助消息,并列出所有合法名称。此外,还可以指定 help 以及一个名称以查看有关该名称的合法值的讨论。

为了降低用户的负担,svcbundle 会在生成清单时进行多项假设以简化操作。如果这些假设对于应用程序不正确,则可以编辑生成的清单:

  • 生成的清单可与主重启程序 svc.startd(1M) 配合使用。

  • 生成对 svc:/milestone/multi-user 的依赖性,以免服务过早启动。有关例外情况,请参见下文的 rc-script。要使某个服务提前启动,可以将清单编辑为依赖 smf(5) 中描述的任何特定服务或任何里程碑。

  • 服务束名称与提供给 service-name 的值相同。

  • 所有 exec_methods 的超时时间为 60 秒。

通过使用 –i 选项,可以获取 svcbundle 以执行大量服务安装操作。它会将生成的清单保存在 /lib/svc/manifest/site 中或将配置文件保存在 /etc/svc/profile/site 中。生成的文件名是使用 –s service-name 指定的服务名称的基名,并且该文件会使用扩展名 .xml。警告:svcbundle 将用该名称覆盖任何现有文件。

然后,svcbundle 将重新启动 manifest-import 服务以处理新创建的文件,并将其合并到 SMF 中。对于清单,svcbundle 将等待服务进入一个最终状态(联机、禁用或维护之一)。在该等待期间开始时,svcbundle 将输出:

svcbundle: waiting for service to reach final_state state

...其中 final_state 为启用或禁用。出现该消息后,可以放心地中断 svcbundle

显然,要使用 –i 选项,需要具有足够的授权,以便在这些受限目录中创建文件,并重新启动 manifest-import 服务。请参见 smf_security(5)

扩展描述

本部分讨论名称/值 (NV) 对。

通过在命令行上使用多个 -s 选项,可以定义生成的整个服务束。每个 NV 对均采用格式 name=value,其中 namename 来自此列表:

bundle-type

要生成的服务束类型。合法值为 manifestprofile。缺省值为 manifest

duration

model 的同义词。

enabled(已启用)

指示是否应启用实例。合法值为 truefalse。缺省值为 true

model

设置服务模型。这是 startd/duration 属性的值。请参阅 svc.startd(1M)。可将模型设置为以下值之一:

  • contract

  • daemoncontract 的同义词

  • child

  • waitchild 的同义词

  • transient

缺省值为 transient

instance-name

实例的名称。缺省值为 default

instance-property=pg_name:prop_name:prop_type:value
service-property=pg_name:prop_name :prop_type:value

这些选项用于在实例或服务中创建名为 pg_name 的属性组,该属性组的类型为应用程序。PG 将具有一个名为 prop_name 的属性,该属性具有一个类型为 prop_type 的值。通过多次调用 *-property,可以创建具有多个属性的属性组。可以使用一个或多个 *-property= 声明,也可以不使用该声明。

通过使用两个连续冒号,可以设置缺省属性类型。请参见下文的“示例”部分。对于清单,将使用缺省属性类型 astring。配置文件不需要指定该属性,因为该属性通常可以通过其他信息源确定。

rc-script=script_path:run_level

该 NV 对会使 svcbundle 发出一个清单,以便于将传统 rc 脚本转换为 SMF 服务。script_pathrc 脚本所在的路径,run_levelrc 脚本的运行级别(请参见 init(1M))。script_path 用于在清单中生成启动和停止 exec_method 元素。exec 属性将设置为:

script_path %m

run_level 用于生成依赖项,以便使该脚本在引导过程中的适当时间运行。

refresh-method

刷新服务时要执行的命令。该值允许使用空格。该值可以包括带百分比符号 (%) 的方法标记,如 smf_method(5) 中所述。缺省值为 :true

service-name

服务的名称。该 NV 对是必需的。

start-method

启动服务时要执行的命令。该值允许使用空格。允许使用 smf_method(5) 中所述的带 % 的方法标记,该标记将放置在清单中,以供重启程序扩展。可以使用 :true。必须为清单指定该 NV 对,除非指定了 rc-script NV 对。配置文件不需要指定该 NV 对。

stop-method

停止服务时要执行的命令。该命令接受诸如 start-method 这类的值,同时,还接受 :kill:true 是瞬态服务的缺省值,而 :kill 是合同和子服务的缺省值。

选项

支持以下命令行选项:

–i

安装生成的文件。有关详细信息,请参见“描述”部分。

–o output_file

指定要创建的文件的名称。

–s name=value

指定名称/值对。有关详细信息,请参见“扩展描述”部分。

如果 –i–o 均未指定,则生成的文件将写入到 stdout。

示例

示例 1 为瞬态服务创建清单

以下命令将为一个简单的瞬态服务创建清单。由于瞬态服务是 svcbundle 的缺省值,因此,只能使用两个选项指定清单。

# svcbundle -s service-name=site/sneezy \
-s start-method=/lib/svc/method/sneezy
示例 2 为守护进程服务创建清单

以下命令将为一个守护进程服务创建清单。

# svcbundle -s service-name=site/sneezy \
-s start-method=/lib/svc/method/sneezy \
-s model=daemon
示例 3 使用 Stop 和 Refresh 命令为守护进程服务创建清单

以下命令将使用 stop 和 refresh 命令为一个守护进程服务创建清单。

# svcbundle -s service-name=site/sleepy \
-s start-method="/lib/svc/method/sleepy %m" \
-s stop-method="/lib/svc/method/sleepy %m" \
-s refresh-method="/lib/svc/method/sleepy %m" \
-s model=daemon
示例 4 使用实例属性创建清单

以下命令将使用实例属性创建清单。

# svcbundle -s service-name=system/happy \
-s start-method=/lib/svc/method/happy \
-s instance-property=config:velocity:count:50 \
-s instance-property=config:color:astring:red

生成的清单将使用包含两个属性(velocitycolor)的配置属性组创建服务实例。

示例 5 rc 脚本转换创建清单

以下命令将创建一个清单以帮助转换 rc 脚本。此示例假定 rc 脚本在多用户级别运行,并且不会启动守护进程。

# svcbundle -s service-name=doc \
-s rc-script=/etc/init.d/doc:2

谨慎的用户将修改 rc 脚本,使其包含 /lib/svc/share/smf_include.sh

示例 6 生成配置文件以修改服务属性

以下命令将生成配置文件以设置 grumpy 服务的 nfsmapid_domain 属性。

# svcbundle -s bundle-type=profile \
-s service-name=network/nfs/grumpy \
-s service-property=nfs-props:nfsmapid_domain:astring:grumpy
示例 7 使用缺省属性类型

以下命令会将 config/color 缺省值的属性类型设置为 astring

# svcbundle -s service-name=system/happy \
-s start-method=/lib/svc/method/happy \
-s instance-property=config:color::red
示例 8 安装清单

以下命令将使用 -i 选项安装清单。在此示例中,生成的清单将写入 /lib/svc/manifest/site/bashful.xml,因为 bashful 是服务名称的基名。

# svcbundle -i -s service-name=application/bashful \
-s start-method=/opt/bashful/start
svcbundle: waiting for application/bashful to reach enabled state

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/
接口稳定性
Committed(已确定)

另请参见

svcs(1)init(1M)svc.startd(1M)svccfg(1M)service_bundle(4)attributes(5)smf_method(5)smf_security(5)smf_template (5)smf(5)