跳过导航链接 | |
退出打印视图 | |
在 Oracle Solaris 11.1 中管理服务和故障 Oracle Solaris 11.1 Information Library (简体中文) |
本节提供 SMF 框架中的术语及其定义。这些术语应用于整个文档。要理解 SMF 概念,必须先了解这些术语。
SMF 框架中的基本管理单元是服务实例。每个 SMF 服务可以在系统上多次运行,而每次的配置略有不同。这些不同的配置被称为服务实例。每个实例是指服务的特定配置。例如,Web 服务器就是一种服务。配置为在端口 80 侦听的特定 Web 服务器守护进程就是一个实例。Web 服务器服务的每个实例都可以有不同的配置要求。服务具有系统范围的配置要求,但是,每个实例都可以根据需要覆盖特定的要求。单个服务的多个实例可作为服务对象的子对象进行管理。
服务不只表示长期运行的标准系统服务(如 in.dhcpd 或 nfsd),服务还表示包括 ISV(独立软件开发商)应用程序在内的各种系统实体。此外,服务还可能表示不太传统的实体,如下所示:
物理网络设备
配置的 IP 地址
内核配置信息
与系统 init 状态相对应的里程碑,如多用户运行级别
通常,服务是一个向应用程序和其他服务(本地和远程)提供一系列功能的实体。服务依赖于隐式和显式声明的本地服务列表。
里程碑是一种特殊类型的服务。里程碑服务表示一种系统就绪情况级别。例如,在 SMF 中,运行级别由里程碑表示。此外,里程碑还可用于指示一组服务的就绪情况,例如 svc:/milestone/name-services:default 用于名称服务,svc:/milestone/config:default 用于 sysconfig 服务。
依赖性定义服务之间的关系。这些关系允许只重新启动那些直接受故障影响的服务(而不是重新启动所有的服务),从而提供精确的故障隔离。依赖性还提供可伸缩、可再现的初始化进程。最后,定义精确的依赖性允许系统启动利用现代计算机高度并行的特点,因为所有不相关的服务都可以并行启动。
服务的重新启动行为是由每个依赖性的 restart_on 属性定义的。可以将某个服务配置为在它所依赖的服务由于错误或其他原因停止或进行了刷新时停止。在由此停止了服务后,该服务将在它所依赖的服务启动后立即自动重新启动。例如,ssh 服务依赖于 network/ipfilter 服务。restart_on 属性设置为 error,表示 ssh 服务将在 network/ipfilter 服务因错误停止时停止,然后自动重新启动。如果遇到其他事件类型,ssh 服务将不会停止。
使用故障管理资源标识符 (Fault Management Resource Identifier, FMRI) 对每个服务实例进行命名。FMRI 包括服务名称和实例名称。例如,rlogin 服务的 FMRI 是 svc:/network/login:rlogin,其中 network/login 标识服务,rlogin 标识服务实例。
FMRI 的等效格式如下所示:
svc://localhost/system/system-log:default
svc:/system/system-log:default
system/system-log:default
此外,很多 SMF 命令可以使用缩写的服务名或实例名,前提是不造成歧义。例如,可以直接使用 system-log 而不使用较长的格式。有关选择相应 FMRI 格式的说明,请参见 SMF 命令手册页,例如 svcadm(1M) 或 svcs(1)。
服务名中包括前缀,用于帮助标识每个服务的用途。这些前缀包括的名称有 application、device、milestone、network 或 system。site 前缀保留用于站点特定的定制信息,这意味着名为 svc:/site/service-name 的服务将永远不会与 Oracle Solaris 发行版所提供的服务发生冲突。
传统的 init.d 脚本也使用以 lrc(而不是 svc)开头的 FMRI 表示,例如 lrc:/etc/rc2_d/S47pppd。传统服务在系统引导期间的初始启动时间可以使用 svcs 命令显示。但是,不能使用 SMF 管理这些服务。
在初始系统部署期间,/etc/inetd.conf 中列出的服务将自动转换为 SMF 服务。这些服务的 FMRI 稍有不同。转换的 inetd 服务的语法如下:
network/service-name/protocol
另外,使用 RPC(远程过程调用)协议的已转换服务的语法如下所示:
network/rpc-service-name/rpc_protocol
其中,service-name 是在 /etc/inetd.conf 中定义的名称,protocol 是该服务的协议。inetconv 命令可用于在初始系统部署后转换 inetd.conf 条目。
svcs 命令显示服务实例的状态、开始时间和 FMRI。每个服务的状态都为下列状态之一:
degraded-服务实例处于启用状态,但是以有限的功能运行。
disabled-服务实例处于禁用状态且尚未运行。
legacy_run-传统服务不由 SMF 进行管理,但是可查看服务。此状态只能由传统服务使用。
maintenance-服务实例遇到错误,必须由管理员解决。
offline-服务实例处于启用状态,但是尚未运行或者无法运行。
online-服务实例处于启用状态,并且已成功启动。
uninitialized-此状态是所有服务在配置经过读取之前的初始状态。
对于正在转换的实例,会向其状态末尾附加一个星号 "*"。如果状态缺失或无法识别,将显示一个问号 "?"。
SMF 清单是 XML 文件,用于描述服务和一组实例。清单导入时会将该服务及其实例的属性装入到服务配置系统信息库中。有关 SMF 清单内容的完整说明,请参见 service_bundle(4) 手册页。此外,有关简化清单创建操作的工具的说明,请参见 svcbundle(1M) 手册页。
清单的首选位置为 /lib/svc/manifest。在引导过程中,svc:/system/early-manifest-import:default 服务将在任何服务启动之前导入和升级存储在该位置的清单。尽早运行导入过程,可以确保系统信息库包含服务启动之前的最新清单信息。在其他时间,您可以运行以下命令来导入这些清单的信息:svcadm restart manifest-import。为了实现兼容,仍提供 /var/svc/manifest,但只有 svc:/filesystem/minimal:default 实例处于联机状态时(表示 /var 已挂载),才会导入位于此位置的清单。
请勿对 Oracle 或第三方软件开发商提供的清单进行更改。请勿直接编辑 /lib/svc/manifest 和 /var/svc/manifest 中的清单,因为任何定制信息都将在升级时丢失。可以创建站点配置文件来定制服务,或者使用 svccfg 或 inetadm 命令直接处理属性。/lib/svc/manifest/site 和 /var/svc/manifest/site 目录也保留用于站点特定的使用。Oracle Solaris 发行版不会在这些目录中提供清单。
在 Oracle Solaris 11 发行版中,可以使用多个清单描述单个服务。例如,此功能可用于在不修改服务现有清单的情况下,定义该服务的新实例。如果多个清单为同一服务或实例在同一管理层定义了相同属性,则 SMF 无法确定要使用哪个值。如果检测到这种冲突,该实例将置于维护状态。有关层的更多信息,请参见SMF 管理层。
SMF 配置文件是 XML 文件,允许对系统提供的服务和实例进行定制。配置文件可用于通过使用一个文件而不是一组脚本实现定制,或者在部署时或安装时定制配置。
可以使用配置文件定制所有配置。
本地定制信息必须放置在 /etc/svc/profile/site 目录中后缀为 .xml 的文件中。当系统引导或运行 svcadm restart manifest-import 命令时,将会应用该目录中的所有定制信息。
与清单一样,/etc/svc/profile/site 中文件之间的任何冲突定义均将被视为冲突,受影响的实例将置于维护状态。
系统配置文件还会在安装期间应用。很少需要对 /etc/svc/profile/generic.xml 中的系统配置文件进行更改。有关更多信息,请参见 smf_bootstrap(5) 手册页。
有关使用配置文件的更多信息,请参见如何应用 SMF 配置文件。
服务配置系统信息库存储服务的持久性配置信息以及 SMF 运行时数据。系统信息库在本地内存和本地文件之间分布。只能使用 SMF 界面对服务配置系统信息库进行处理和查询。有关处理和访问系统信息库的更多信息,请参见 svccfg(1M) 和 svcprop(1) 手册页。svc.configd(1M) 手册页中对服务配置系统信息库守护进程进行了说明。libscf(3LIB) 手册页中对服务配置库进行了说明。
可以针对服务或实例定义系统信息库中的属性。对服务设置的属性由该服务的所有实例共享。对实例设置的属性仅由该实例使用,并且可以覆盖服务的属性。
svccfg 命令提供属性的原始视图,可以精确显示属性是针对服务还是实例设置的。如果您使用 svccfg 命令查看服务,将无法看到实例属性。如果您查看实例,则无法看到服务属性。svcprop 命令提供实例的组合视图,其中实例属性和服务属性组合到一个属性名称空间中。当启动了服务实例时,将会使用这些实例属性的组合视图。
可以使用 Oracle Solaris 审计框架记录所有 SMF 配置更改。有关更多信息,请参阅《Oracle Solaris 11.1 管理:安全服务》中的"配置审计服务(任务列表)"。
在 Oracle Solaris 11 发行版中,记录属性、属性组、实例和服务源的信息已经添加到服务配置系统信息库中。通过此信息,用户可以确定哪些数据是管理定制数据,哪些数据是随软件一起提供的数据。
为了帮助识别实体的源,定义了以下层:
admin 层包含使用 SMF 命令或通过调用 libscf(3LIB) API 进行的所有更改。
site-profile 层包含 /etc/svc/profile/site 目录内的文件中或传统 /etc/svc/profile/site.xml 和 /var/svc/profile/site.xml 配置文件中的所有值。
system-profile 层包含以下系统配置文件位置中的所有值:/etc/svc/profile/generic.xml 和 /etc/svc/profile/platform.xml。
manifest 层包含来自以下系统清单目录的值:/lib/svc/manifest 或 /var/svc/manifest。
为了保持与希望每个属性名只对应一个属性的现有客户机的兼容性,以及为了创建覆盖策略,分层机制包含简单的覆盖行为。admin 层优先级最高。如果某个属性在 admin 层中有值,则服务将使用该值。否则,服务将依次检查 site-profile 层、system-profile 层和 manifest 层。此行为允许本地定制值优先于安装系统时提供的值。
这些层由系统自动管理。管理员对系统信息库直接进行的更改仅显示在 admin 层中。对其他层的更改只能通过在标准位置放置或删除文件进行。由于文件内容而将某个属性放置到系统信息库中时,有关该属性的信息包括内容来源文件的名称。
管理员无法使用 svccfg 或 libscf 调用来直接修改较低的层。使用 svccfg delete、svccfg delpg 或 svccfg delprop 命令时,实体将被屏蔽而不是完全删除。通常,用户看不到已删除的实体,但是可使用 svccfg listcust 命令显式浏览屏蔽的实体,并可在需要时使用 svccfg delcust 命令取消屏蔽实体。通过浏览屏蔽的实体,管理员可以了解删除屏蔽之后配置是什么样的,并且可以在不损害运行系统的情况下做出更改(如有必要)。
svccfg listprop 命令具有允许浏览这些层的选项。例如,svccfg listprop -l all 可显示所有层以及每个层中的值。此外,svccfg listcust 命令还可用于仅列出定制信息。
SMF 自动对系统信息库执行下列备份操作:
在每次系统启动过程中,在即将对系统信息库进行首次更改之前,会执行引导备份。
如果服务导入了任何新的清单或运行了任何升级脚本,manifest_import 的备份将在 svc:/system/early-manifest-import:default 或 svc:/system/manifest-import:default 完成后进行。
系统将为上述两种类型各维护四个备份。系统会在必要时删除最旧的备份。备份存储为 /etc/svc/repository -type-YYYYMMDD_HHMMSWS,其中 YYYYMMDD(年、月和日)和 HHMMSS(小时、分钟和秒)是执行备份的日期和时间。请注意,小时格式基于 24 小时制。
在发生错误时,可以从这些备份中恢复系统信息库。为此,可使用 /lib/svc/bin/restore_repository 命令。有关更多信息,请参见如何修复已损坏的系统信息库。
服务配置系统信息库中的数据包括快照以及可编辑的配置。每个服务实例的相关数据都存储在快照中。标准快照如下所示:
initial-在首次导入清单时提取
running-在 svcadm refresh 运行时提取
start-在最后一次成功启动时提取
始终使用 running 快照执行 SMF 服务。如果此快照不存在,系统将自动创建。
svccfg 命令用于更改当前属性值。当运行 svcadm refresh 命令将这些值集成到运行中的快照时,这些值将对服务可见。svccfg 命令还可用于查看或恢复其他快照中的实例配置。
特定于服务的信息,包括服务或其方法发出的错误以及有关启用操作、启动时间等的信息,记录在 /var/svc/log 内每个服务实例的单个文件中。要确定服务的日志文件名称,请运行 svcs -x service 命令。
缺省情况下,SMF 仅在需要进行管理干预时(例如,如果服务进入维护状态),才会将日志消息写入 syslog 程序和控制台中。提供了其他选项,但很少使用。有关其他可能的配置,请参见 svc.startd(1M) 手册页。
此外,为了进行错误日志记录,可以将 SMF 服务配置为在发生 FMA 事件或服务进入或退出某个服务状态时,向您发出通知。这些通知可以使用简单网络管理协议 (Simple Network Management Protocol, SNMP) 或简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP)。有关设置 SMF 通知的信息,请参见如何设置 SMF 转换事件的通知。