svcbundle [-i | -o output_file] -s name=value...
svcbundle help [name]
svcbundle 命令用于生成 SMF 清单。此清单是通过多个 –s 选项指定的。要生成清单,必须指定 service-name 和 start-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,其中 name 和 name 来自此列表:
要生成的服务束类型。合法值为 manifest 和 profile。缺省值为 manifest。
model 的同义词。
指示是否应启用实例。合法值为 true 和 false。缺省值为 true。
设置服务模型。这是 startd/duration 属性的值。请参阅 svc.startd(1M)。可将模型设置为以下值之一:
contract
daemon-contract 的同义词
child
wait-child 的同义词
transient
缺省值为 transient。
实例的名称。缺省值为 default。
这些选项用于在实例或服务中创建名为 pg_name 的属性组,该属性组的类型为应用程序。PG 将具有一个名为 prop_name 的属性,该属性具有一个类型为 prop_type 的值。通过多次调用 *-property,可以创建具有多个属性的属性组。可以使用一个或多个 *-property= 声明,也可以不使用该声明。
通过使用两个连续冒号,可以设置缺省属性类型。请参见下文的“示例”部分。对于清单,将使用缺省属性类型 astring。配置文件不需要指定该属性,因为该属性通常可以通过其他信息源确定。
该 NV 对会使 svcbundle 发出一个清单,以便于将传统 rc 脚本转换为 SMF 服务。script_path 是 rc 脚本所在的路径,run_level 是 rc 脚本的运行级别(请参见 init(1M))。script_path 用于在清单中生成启动和停止 exec_method 元素。exec 属性将设置为:
script_path %m
run_level 用于生成依赖项,以便使该脚本在引导过程中的适当时间运行。
刷新服务时要执行的命令。该值允许使用空格。该值可以包括带百分比符号 (%) 的方法标记,如 smf_method(5) 中所述。缺省值为 :true。
服务的名称。该 NV 对是必需的。
启动服务时要执行的命令。该值允许使用空格。允许使用 smf_method(5) 中所述的带 % 的方法标记,该标记将放置在清单中,以供重启程序扩展。可以使用 :true。必须为清单指定该 NV 对,除非指定了 rc-script NV 对。配置文件不需要指定该 NV 对。
停止服务时要执行的命令。该命令接受诸如 start-method 这类的值,同时,还接受 :kill。:true 是瞬态服务的缺省值,而 :kill 是合同和子服务的缺省值。
支持以下命令行选项:
安装生成的文件。有关详细信息,请参见“描述”部分。
指定要创建的文件的名称。
指定名称/值对。有关详细信息,请参见“扩展描述”部分。
如果 –i 和 –o 均未指定,则生成的文件将写入到 stdout。
以下命令将为一个简单的瞬态服务创建清单。由于瞬态服务是 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
生成的清单将使用包含两个属性(velocity 和 color)的配置属性组创建服务实例。
示例 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):
|
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)