跳过导航链接 | |
退出打印视图 | |
![]() |
手册页第 1M 部分:系统管理命令 Oracle Solaris 11.1 Information Library (简体中文) |
- 导入、导出和修改服务配置
/usr/sbin/svccfg [-v] [-s FMRI]
/usr/sbin/svccfg [-v] [-s FMRI] subcommand [args]...
/usr/sbin/svccfg [-v] [-s FMRI] -f command-file
svccfg 命令处理服务配置系统信息库中的数据。svccfg 可以通过单个子命令或指定一个包含一系列子命令的命令文件以交互方式调用。
对系统信息库中现有服务所做的更改通常在下次刷新服务实例之后才会对该服务生效。有关更多详细信息,请参见下文中的 refresh 子命令或参见 svcadm(1M) 手册页中的 refresh 子命令。
支持以下选项:
读取并执行 command-file 中的 svccfg 子命令。
在执行任何子命令之前选择 FMRI(fault management resource identifier,故障管理资源标识符)所表示的实体。如果未提供 -f command-file,且命令行中未指定任何子命令,则屏蔽的实体将被视为不存在。请参见 smf(5)。
详细模式。
子命令分为几类,如以下各小节所述。
所有接受 FMRI 的子命令还接受缩写或 glob 模式。可以通过指定实例名称或服务名称的结尾部分使用实例或服务的缩写形式。例如,对于以下 FMRI:
svc:/network/smtp:sendmail
下列各项都是有效的缩写:
sendmail :sendmail smtp smtp:sendmail network/smtp
而下列项则无效:
mail network network/smt
FMRI 的缩写形式不稳定,不应在脚本或其他永久性工具中使用。如果模式与多个实例或服务匹配,则会输出一条错误消息并且不采取任何操作。
立即退出。
将 repfile 用作系统信息库。缺省情况下,svccfg(1M) 使用系统信息库。
仅将系统信息库用于您当前正在运行的相同版本的 Solaris 中的文件(包括修补程序)。不要将该子命令用于系统信息库 /etc/svc/repository.db。
如果在部署时间之前使用 svccfg repository 预填充 SMF 系统信息库,则使用 -p 选项为使用 import 导入的清单的系统标准位置指定根前缀。系统信息库位于活动系统上后,该前缀将被 /lib/svc/manifest 和 /var/svc/manifest 替换。如果运行时 -p 目录的清单未显示在系统标准位置中,将删除与它们关联的服务。
设置可选行为。如果未指定选项,设置会显示当前有效的选项。
启用详细模式。
禁用详细模式。
如果参数是服务配置文件或清单,则将配置应用到 SMF 系统信息库的管理层。将根据需要创建服务、实例、属性组和属性。
如果未指定属性或属性组的类型特性,将尝试从现有的类型设置或服务模板确定类型。如果无法确定类型,将显示一条警告并跳过服务,这样就不会在服务和实例中引入不一致的数据。忽略不存在的服务和实例。
要使用配置文件中的宽松元素定义,需要将以下定义添加到 DOCTYPE 条目中:
<!ENTITY % profile "INCLUDE"> <!ENTITY % manifest "IGNORE">
将刷新配置文件修改的服务和实例。如果指定了 -n,将处理配置文件并且不对 SMF 系统信息库应用更改。将在标准错误中报告已找到的任何语法错误并返回退出代码 1。有关服务配置文件的说明,请参见 smf(5)。该命令需要具有修改服务和实例中的属性的特权。有关修改属性所需的特权,请参见 smf_security(5)。
将针对清单和系统信息库中的模板数据验证清单或配置文件中的服务和实例,并发出所有违反模板的警告。有关模板说明,请参见 smf_template(5)。如果指定了 -V 选项,将无法导入违反已定义模板的清单。在交互式调用 svccfg 时,-V 是缺省行为。
如果要应用的参数是一个目录,则会按照以上所述应用在该目录树下找到的所有配置文件。如果指定文件或在指定目录下找到的任何文件不是服务配置文件,该子命令将失败。
显示指定 FMRI 的服务配置文件,如果未指定 FMRI,则显示整个系统的服务配置文件。
如果提供 -l,则可以选择从中提取值的层列表。-l 选项需要层名称,并使用以下参数:manifest、system-profile、site-profile、admin、current、all。current 和 all 是同义词,选择最高层值。多个层可以以逗号分隔,或使用多个 -l 选项指定。
如果未提供 -l,则缺省值为 -l admin,site-profile。
如果在多个选定层中定义属性,则在配置文件中仅导出最高层。
如果没有 -a 选项,将提取包含受保护信息(由存在的 read_authorization 属性标识,请参见 smf_security(5))的属性组,但不提取它们的属性值。指定 -a 选项时,将提取所有的值。如果没有读取这些值的足够特权,则会生成错误。
如果指定了 FMRI 且该 FMRI 是一项服务,则该配置文件将仅包含该服务及该服务的实例的定制设置。如果提供的 FMRI 是一个实例,则该配置文件将包含所提供服务和实例的定制设置。
运行 svccfg export 等效于:
svccfg extract -l current [-a] service_FMRI [>file]
系统管理的文件系统位置(/lib/svc/manifest 和 /var/svc/manifest 的子目录)中的文件上的 svccfg import 调用:svcadm restart manifest-import。
推荐的做法是将清单放置在系统管理的位置,并调用 svcadm restart manifest-import 来导入它们。
位于其他位置的文件上的 svccfg import 将其属性作为管理定制导入到管理层。这等效于:
svccfg apply [file | directory]
如果 file 确定为服务清单或配置文件,则会输出 file 说明的服务和实例的 FMRI。对于每个服务,在服务的 FMRI 之前会显示其实例的 FMRI。
validate 子命令可以针对清单文件、实例 FMRI、当前实例或快照实体选择运行。指定参数后,svccfg 将检查是否存在指定的文件。如果该文件存在,将对其进行验证。如果指定名称的文件不存在,则将该参数视为 FMRI 模式。如果文件名与 FMRI 之间存在冲突,请使用 svc: 和 file: 前缀指示 svccfg 如何解释参数。
指定文件时,将按照与 import -V 相似的方式处理该文件,但不对系统信息库执行任何更改。如果检测到任何错误,svccfg 会显示错误并以非零退出状态退出。
对于实例 fmri、实例实体选择或快照实体选择,将针对系统信息库中的模板数据验证复合格式的指定实例(请参见 smf(5) 中的“属性和属性组”)。实例 FMRI 和实例实体选择使用“正在运行的”快照进行验证。将发出所有违反模板的警告。有关模板说明,请参见 smf_template(5)。
“实体”表示作用域、服务或服务实例。
将创建具有指定名称的新实体作为当前选择的子实体。有关创建实体所需的特权,请参见 smf_security(5)。
删除当前选择的命名子实体或 fmri 指定的实体。除非指定 -f 标志,否则尝试删除“联机”或“降级”状态的服务实例会失败。如果服务或服务实例具有类型为 "framework" 的 "dependents" 属性组,则对于其中类型为 "astring" 或 "fmri" 的每个属性,当属性包含用于命名服务或服务实例的单个值时,将删除指定服务或服务实例中与该属性同名的依赖项属性组。有关删除服务配置所需的特权,请参见 smf_security(5)。
使用 FMRI 调用 delete 子命令时,如果该 FMRI 通过标准位置中的清单来标识服务,则该命令仅屏蔽该服务的定义,而不会将其删除。要删除服务,必须删除其清单,然后通过以下命令重新启动清单导入服务:
# svcadm restart manifest-import
请注意,重新导入清单不会去除屏蔽。
使用 liscust 子命令及 -M 选项可列出屏蔽的服务。有关取消屏蔽服务的示例,请参见“示例”部分。
有关 Oracle Solaris 服务管理工具的说明,请参见 smf(5)。
显示其名称与 glob 模式 pattern 匹配的当前选择的子实体(请参见 fnmatch(5))。还为具有属性的实体(即服务和服务实例)列出 ':properties'。
将当前配置的值提交到正在运行的快照,并使这些值可供当前选择的实例使用。如果系统信息库子命令尚未用于选择系统信息库,则指示该实例的重启程序重新读取更新的配置。如果选择是一个服务,将刷新该服务的所有实例。
如果参数指定当前所选内容的子级,它将成为当前所选内容。否则,参数将被解释为 FMRI,参数指定的实体成为当前所选内容。
当前所选内容的父级成为当前所选内容。
将具有指定 name 和类型的属性组添加到当前所选内容。flags 是一个字符串,用于指定创建属性组所使用的标志。'P' 表示 SCF_PG_FLAG_NONPERSISTENT(请参见 scf_service_add_pg(3SCF))。有关创建属性组所需的特权,请参见 smf_security(5)。
将指定值添加到属性。如果 type 已指定并且属性存在,则当 type 与属性的 type 不一致时,子命令将失败。如果 pg 不存在,在 addpropvalue 可以在模板定义中找到 pg 类型和标志的情况下,它将创建一个 pg。如果选择是一个实例,则 addpropvalue 会在查看模板定义之前在服务中查找 pg 类型和标志。如果未找到 pg 类型和标志,该子命令将失败。这些值可以用双引号括起。包含双引号或反斜杠的字符串值必须用双引号括起,其中的双引号和反斜杠必须用反斜杠引住。创建不存在的属性,在这种情况下必须提供 type 说明符。有关可用属性类型的列表,请参见 scf_value_create(3SCF)。有关修改属性所需的特权,请参见 smf_security(5)。新值将附加到与属性相关的属性值列表末尾处。
删除当前选择的任何管理定制。如果提供参数,将作为 glob 模式获取并仅删除名称与参数匹配的属性组和属性。
如果当前未进行任何选择,则不会进行任何更改,该子命令将失败。
如果提供 -M,则仅删除屏蔽的实体。
要查看 delcust 将删除的定制,请使用 listcust 和相同的选项。因为 delcust 可能删除当前选择的所有管理定制,所以始终首先运行 listcust 来确定您要删除所需的内容。
删除当前选择的属性组 name。有关删除属性组所需的特权,请参见 smf_security(5)。
如果属性组由清单或配置文件支持,则它被屏蔽。请参见 smf(5)。
删除当前选择的命名属性组或属性。有关删除属性所需的特权,请参见 smf_security(5)。
删除与命名属性中的指定 glob 模式匹配的所有值。即使没有值与之匹配也会成功。有关修改属性所需的特权,请参见 smf_security(5)。
说明当前或可能的设置。
不使用参数调用时,describe 会提供当前所选实体及其所有当前设置的属性组和属性的基本说明(如果有)。通过指定属性组名称或者属性组名称和属性名称(用斜杠 (/) 隔开),可以将属性组或具体属性作为参数查询。
-v 选项提供所有的可用信息,包括当前设置、约束及其他可能的设置选择的说明。
-t 选项仅显示选择的模板数据(请参见 smf_template(5)),不显示属性组和属性的当前设置。
对用于重现当前选择的属性组和属性的命令的注释将放置在临时文件中,并且将调用 VISUAL 环境变量指定的程序来对其进行编辑。如果未定义 VISUAL,则将改用 EDITOR。如果两个环境变量都没有定义,则将使用缺省编辑器 vi(1)。完成后执行临时文件中的命令。有关创建、修改或删除属性所需的特权,请参见 smf_security(5)。
缺省情况下,editprop 不会显示诸如框架、依赖性、模板、防火墙之类的 SMF 基础结构属性组,也不会显示在模板上其可见性设置为隐藏的通知参数或属性。如果选择了一个实例,则会将属性的复合视图放置在临时文件中。-a 选项会将所有属性放置在临时文件中,包括 SMF 基础结构属性组中的属性以及那些在模板上其可见性设置为隐藏的属性。
显示当前选择的属性组的名称、类型和标志。如果指定了某个参数,将作为 glob 模式获取并仅列出名称与该参数匹配的属性组。
在交互模式下,还提供属性组的基本说明。
列出当前选择的属性组和属性。对于属性组,列出其名称、类型和标志。对于属性,列出其名称(前面会加上属性组名称和斜杠 (/))、类型和值。有关可用属性类型的列表,请参见 scf_value_create(3SCF)。如果提供参数,将作为 glob 模式获取并仅列出名称与参数匹配的属性组和属性。
使用 -l 选项,输出值来自的层。-l 选项需要层,并使用以下参数:manifest、system-profile、site-profile、admin、current、all。current 输出与 listprop 相同的属性值(不使用 -l),以及在其中定义值的层。
-f 和 -o 选项是互斥的。-f 输出属性来自的文件(如果有)。-o 允许字段选择。可选择的字段包括:
属性名称
属性组名称
实例名称
服务名称
层
属性类型
属性值
源文件
属性组或属性当前是否被屏蔽
上次更改该属性的时间
输出当前选择的所有管理层定制和屏蔽实体。如果提供参数,将作为 glob 模式获取并仅列出名称与参数匹配的属性组和属性。
如果没有当前选择,则列出所有服务的所有定制。
如果提供 -M,则仅输出屏蔽的实体。
如果提供 -L,则显示所有本地定制,包括同时位于管理层和站点配置文件层内的定制。
如果 method_name 属性组具有类型 "method",则通过更改该属性组中的 "environment" 属性设置服务或实例的方法环境变量。如果未指定 method_name 并且使用 -i 选项,则当前选择实例时将使用 "method_context" 属性组。如果使用 -s 选项并且当前选择了服务,则会使用其 "method_context" 属性组。如果使用 -s 选项并且当前选择了实例,则会使用其父级的 "method_context" 属性组。如果既不使用 -i 选项也不使用 -s 选项,将在当前选择的实体中搜索 "start" 属性组,如果当前选择了实例,则还会搜索其父级。如果未找到 "inetd_start" 属性组,将以类似方式进行搜索。
找到属性后,将删除所有以 envvar 开始并且后跟 "=" 的值,同时添加值 "envvar=value"。有关修改属性所需的特权,请参见 smf_security(5)。
将当前选择的 pg 属性组的 name 属性设置为类型 type 的指定值。有关可用属性类型的列表,请参见 scf_value_create(3SCF)。如果 pg 不存在,在 setprop 可以在模板定义中找到 pg 类型和标志的情况下,它将创建一个 pg。如果选择是一个实例,则 setprop 会在查看模板定义之前在服务中查找 pg 类型和标志。如果未找到 pg 类型和标志,该子命令将失败。指定属性不存在时,只要指定了类型,即会创建属性。如果属性已经存在并且type与属性中的现有type不一致,子命令将失败。如果未提供任何类型和值,setprop 将删除 pg/name 的所有值。值可以用双引号括起。包含双引号或反斜杠的字符串值必须用双引号括起,其中的双引号和反斜杠必须用反斜杠引住。多个值将按照它们的指定顺序存储。有关创建或修改属性所需的特权,请参见 smf_security(5)。
如果 method_name 属性组具有类型 "method",则通过更改该属性组中的 "environment" 属性删除服务或实例的方法环境变量。如果未指定 method_name 并且使用 -i 选项,则当前选择实例时将使用 "method_context" 属性组。如果使用 -s 选项并且当前选择了服务,则会使用其 "method_context" 属性组。如果使用 -s 选项并且当前选择了实例,则会使用其父级的 "method_context" 属性组。如果既不使用 -i 选项也不使用 -s 选项,将在当前选择的实体中搜索 "start" 属性组,如果当前选择了实例,则还会搜索其父级。如果未找到 "inetd_start" 属性组,将以类似方式进行搜索。
找到属性后,将删除所有以 envvar 开始并且后跟 "=" 的值。有关修改属性所需的特权,请参见 smf_security(5)。
为 SMF 系统信息库中的软件事件和故障管理问题生命周期事件设置通知参数。
用于设置 SMF 状态转换的系统范围的通知参数。请参见 smf(5)。这些通知参数是在 svc:/system/svc/global:default 中设置的,与当前选择的 svccfg 无关。该子命令会刷新其所修改的全部实例。
FMA 事件类或别名的逗号分隔列表。请参见 smf(5) 通知参数。
SMF 状态转换的逗号分隔列表。请参见 smf(5) 通知参数。
实施的每种通知机制的 URI 格式:对于 SMTP,使用:
mailto:addr[?header1=value1[&header2=value2]]
...或者:
mailto:{[active]|inactive}
...对于 SNMP 陷阱,使用:
snmp:{[active]|inactive}
sasinfo(1M) 中定义的参数 msg_template 可以设置为 mailto URI 中的头值。例如:
mailto:root@localhost?msg_template=<path to template file>
SNMP 陷阱指向 /etc/net-snmp/snmp/snmpd.conf 中的 trapsink 指令定义的或 SNMP 陷阱通知守护进程指定的主机。请参见 sasinfo(1M)。
通知参数特定于指定的类或 tset 并覆盖预先存在的通知参数。活动/非活动表单不会覆盖以前的通知参数。它仅启用或禁用指定类或 tset 的通知机制。设置通知参数时可隐式将它们设置为活动状态。
显示指定类或 tset 的现有通知参数。使用 -g 选项,会显示 svc:/system/svc/global:default 中的通知参数。如果省略 tset,表示使用 all。
删除指定类或 tset 的现有通知参数。使用 -g 选项,会删除 svc:/system/svc/global:default 中的通知参数。
显示用于当前所选实例的快照。
将当前所选实例及其服务的管理定制恢复到记录在命名快照中的属性。如果未提供参数,请使用当前所选的快照,然后在成功时取消选择该快照。可以通过 svcadm(1M) 的 refresh 子命令将已更改的属性值设置为活动状态。有关更改属性所需的特权,请参见 smf_security(5)。
将当前快照更改为 name 命名的快照。如果未指定 name,取消选择当前选择的快照。快照是只读的。
将当前配置的值提交到正在运行的快照,并使这些值可供当前选择的实例使用。如果系统信息库子命令尚未用于选择系统信息库,则指示该实例的重启程序重新读取更新的配置。
示例 1 导入服务说明
以下示例导入命令行上指定的 XML 清单中 seismic 服务的服务说明。
# svccfg import /var/svc/manifest/site/seismic.xml
请注意清单必须遵守 service_bundle(4) 中指定的格式。
示例 2 导出服务说明
要在本地系统中导出服务说明,请执行以下命令:
# svccfg export dumpadm >/tmp/dump.xml
示例 3 删除服务实例
要删除服务实例,请执行以下命令:
# svccfg delete network/inetd-upgrade:default
示例 4 检查备用系统信息库中的属性
要在装入备用系统信息库之后检查服务的属性状态,请使用如下所示的命令序列。例如,用户可以使用此类命令确定是否在特定的系统信息库备份中启用了服务。
# svccfg svc:> repository /etc/svc/repository-boot svc:> select telnet:default svc:/network/telnet:default> listprop general/enabled general/enabled boolean false svc:/network/telnet:default> exit
示例 5 启用调试
要修改启动方法的 LD_PRELOAD 并在调试功能处于活动状态的情况下启用 libumem(3LIB),请执行以下命令:
$ svccfg -s system/service setenv LD_PRELOAD libumem.so $ svccfg -s system/service setenv UMEM_DEBUG default
示例 6 使用 describe 子命令
以下命令说明了 describe 子命令的用法。
# svccfg -s console-login describe ttymon ttymon application ttymon/device astring /dev/console terminal device to be used for the console login prompt ttymon/label astring console appropriate entry from /etc/ttydefs ...
示例 7 配置通知首选项
以下命令为 SMF 服务状态转换事件配置通知首选项。
# svccfg setnotify -g from-online,to-maintenance \ mailto:admin@somehost.com
示例 8 启用 SNMP 通知
以下命令对故障管理事件启用 SNMP 通知。
# svccfg setnotify problem-diagnosed,problem-updated \ mailto:admin@somehost.com snmp:
示例 9 列出通知设置
以下命令列出故障管理事件的通知设置。
# svccfg listnotify problem-diagnosed,problem-updated Event: problem-diagnosed Notification Type: smtp active: true to: admin@somehost.com Notification Type: snmp active: true Event: problem-updated Notification Type: smtp active: true to: admin@somehost.com Notification Type: snmp active: true
示例 10 取消对服务的屏蔽
以下命令序列说明了查看服务 mysvc 是否存在、屏蔽该 mysvc 并最终取消对该服务的屏蔽的过程。
$ svcs -l mysvc fmri svc:/system/mysvc:default name Manifest to test snapshots enabled true state online next_state none state_time January 13, 2012 09:42:55 AM MST logfile /var/svc/log/system-mysvc:default.log restarter svc:/system/svc/restarter:default manifest /lib/svc/manifest/test/mysvc.xml dependency require_all/none svc:/system/filesystem/local (online) [ Note manifest file in standard location. ] # svccfg delete -f mysvc $ svcs mysvc svcs: Pattern 'mysvc' doesn't match any instances STATE STIME FMRI [ Not listed because service is masked. ] $ svccfg listcust -M | grep mysvc svc:/system/mysvc manifest MASKED manifestfiles/lib_svc_manifest_test_mysvc_xml astring admin \ MASKED /lib/svc/manifest/test/mysvc.xml svc:/system/mysvc:default manifest MASKED [ First line, above, shows that service is masked. Masking is propagated down, so the instance is also masked as shown in the last line. ] # svccfg -s svc:/system/mysvc delcust Deleting customizations for service: system/mysvc $ svcs mysvc STATE STIME FMRI online 9:48:25 svc:/system/mysvc:default [ Masking has been removed. ]
示例 11 设置多值属性
以下命令将设置一个多值属性。请注意,属性被括在一个单引号中,以便括号和双引号不需要转义。
# svccfg -s svc:/stooges setprop foo/bar = astring: \ '("moe" "Curly" "Larry")'
示例 12 使用 setprop 清除某个属性的所有值
以下命令使用 setprop 来清除某个属性的所有值。
# svccfg -s svc:/stooges setprop foo/bar =
示例 13 使用 delpropvalue 清除某个属性的所有值
以下命令使用 delpropvalue 来清除某个属性的所有值。
# svccfg -s svc:/stooges delpropvalue foo/bar \*
示例 14 设置包含嵌入空格的属性
以下命令显示了当属性的值是一个包含嵌入空格的字符串时,在设置该属性时如何正确地使用引号。
# svccfg -s svc:inst setprop pg/prop = \ astring '"without single quotes, shells eat double quotes"'
使用 editprop 子命令时运行的命令。缺省编辑器是 vi(1)。
将返回以下退出值:
成功执行。
一个或多个子命令导致失败。错误消息将写入标准错误流中。
指定的命令行选项无效。
有关下列属性的说明,请参见 attributes(5):
|
交互式输出为 Uncommitted(未确定)。调用和非交互式输出为 Committed(已确定)。
svcprop(1)、svcs(1)、sasinfo(1M)、svcadm(1M)、svc.configd(1M)、libscf(3LIB)、libumem(3LIB)、scf_service_add_pg(3SCF)、scf_value_create(3SCF)、contract(4)、service_bundle(4)、attributes(5)、fnmatch(5)、smf(5)、smf_method(5)、smf_security(5)、smf_template(5)