系统管理指南:基本管理 第15 章• 管理服务(任务)

14 第1 4 章
273
■ 允许使用svcadm 来启用和禁用服务。这些更改不会因升级或重新启动而失效。如果
使用-t 选项,则所做的更改将是临时更改。
■ 管理员能够安全地将任务委托给非超级用户,这些任务包括在系统中修改属性以及
启用、禁用或重新启动服务等任务。
■ 依据服务的相关性并行启动服务,从而提高大型系统的引导速度。关机时过程相
反。
■ 可以对引导控制台输出进行自定义,尽可能采用静默方式(缺省设置);或使用
boot -m verbose 将其自定义为详细模式。
■ 尽可能兼容现有的管理习惯。例如,多数客户和ISV(独立软件开发商)提供的rc
脚本仍可像往常一样工作。
相关性语句定义服务之间的关系。使用这些关系,可以只重新启动那些在缺省情况下
直接受到影响的服务(而不是重新启动所有的服务),从而提供精确的故障隔离。相
关性语句的另一个优点是,允许针对可伸缩和可再现的初始化进程使用相关性语句。
另外,通过定义所有的相关性,可以利用新式高度并行的机器,因为所有的相关性服
务都可以并行启动。
SMF 定义了一组可以由管理员针对服务调用的操作。这些操作包括启用、禁用、刷
新、重新启动和维护。每个服务都由执行管理操作的服务重新启动器来管理。通常,
重新启动器通过执行服务的方法来执行操作。每个服务的方法都在服务配置系统信息
库中定义。这些方法允许重新启动器更改服务的状态。
在每个服务成功启动时,服务配置系统信息库将按服务提供快照,这使回退成为可
能。另外,系统信息库提供一致而持久的方法来启用或禁用服务,并提供一致的服务
状态视图。此功能有助于调试服务配置问题。
使用SMF 时的行为更改
由SMF 提供的多数功能都发生在后台,因此不为用户所知。其他功能可由新命令访
问。以下列出了最明显的行为更改。
■ 现在引导过程创建的消息要少许多。缺省情况下,在启动服务时并不显示消息。由
引导消息提供的所有信息现在可在每个服务的日志文件(位于/var/svc/log 中)中
找到。可以使用svcs 命令来帮助诊断引导问题。另外,还可以使用boot 命令的-v
选项。当在引导过程中启动每个服务时,该命令会生成一条消息。
■ 如果有可能,服务将会自动重新启动,因此似乎进程拒绝中止。如果服务有缺陷,
则该服务将被置于维护模式,但通常服务会在进程中止之后重新启动。应当使用
svcadm 命令来禁用任何不应运行的SMF 服务。
■ /etc/init.d 和/etc/rc*.d 中的许多脚本已经被删除。这些脚本将不再是启用或禁用
服务所必需的脚本。/etc/inittab 中的项也已经过删除,以便可以使用SMF 对服务
进行管理。由ISV 提供或在本地开发的脚本和inittab 项将能够继续运行。在引导
过程中,不同的服务不会恰好同时启动,但是它们不会在SMF 服务之前启动,因此
所有的服务相关性都应当没有问题。
使用SMF 时的行为更改
274 系统管理指南:基本管理• 2006 年7 月
SMF 概念
本节提供SMF 框架中的术语及其定义。这些术语应用于整个文档。要理解SMF 概念,
必须先了解这些术语。
SMF 服务
SMF 框架中的基本管理单元是服务实例。每个SMF 服务都有可能配置了多个版本。而
且,同一版本的多个实例也可以在一个Solaris 系统上运行。实例是指服务的特定配
置。Web 服务器就是一种服务。配置为在端口80 侦听的特定Web 服务器守护进程就是
一个实例。Web 服务器服务的每个实例都可以有不同的配置要求。服务具有系统范围
的配置要求,但是,每个实例都可以根据需要覆盖特定的要求。单个服务的多个实例
可作为服务对象的子对象进行管理。
服务不只表示长期运行的标准系统服务(如in.dhcpd 或nfsd),还表示包括ISV 应用
程序(如Oracle 软件)的各种系统实体。此外,服务还可能包括如下所示的较不传统
的实体:
■ 物理网络设备
■ 配置的IP 地址
■ 内核配置信息
■ 与系统init 状态相对应的里程碑,如多用户运行级
通常,服务是一个向应用程序和其他服务(本地和远程)提供一系列功能的实体。服
务依赖于隐式声明的本地服务列表。
里程碑是特殊类型的服务。里程碑服务表示系统的高级属性。例如,构成运行级S、2
和3 的服务均由里程碑服务表示。
服务标识符
使用故障管理资源标识符(FaultManagement 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 命令可以使用此FMRI 格式:svc:/system/system-log。一些命令将推
断要使用哪个实例,以及何时没有多义性。有关选择适当的FMRI 格式的说明,请参见
SMF 命令手册页,如svcadm(1M) 或svcs(1)。
SMF 概念
第14 章• 管理服务(概述) 275
服务名称中通常包括一个常规的功能类别。这些类别包括:
■ application
■ device
■ milestone
■ network
■ platform
■ site
■ system
传统的init.d 脚本也使用以lrc(而不是svc)开头的FMRI 进行表示,例如
:lrc:/etc/rcS_d/S35cacheos_sh。可使用SMF 对传统服务进行监视。但是,您无法管
理这些服务。
首次使用SMF 引导系统时,列在/etc/inetd.conf 中的服务会自动转换为SMF 服务。
这些服务的FMRI 稍有不同。已转换的inetd 服务的语法如下所示:
network/<service-name>/<protocol>
另外,使用RPC(远程过程调用)协议的已转换服务的语法如下所示:
network/rpc-<service-name>/rpc_<protocol>
其中,<service-name> 是在/etc/inetd.conf 中定义的名称,<protocol> 是服务的协议。
例如,rpc.cmsd 服务的FMRI 是network/rpc-100068_2-5/rpc_udp。
服务状态
svcs 命令显示服务实例的状态、开始时间和FMRI。每个服务的状态都为下列状态之一

■ degraded-服务实例处于启用状态,但是以有限的功能运行。
■ disabled-服务实例处于禁用状态且尚未运行。
■ legacy_run-传统服务不由SMF 进行管理,但是可查看服务。此状态只能由传统服
务使用。
■ maintenance-服务实例遇到错误,必须由管理员解决。
■ offline-服务实例处于启用状态,但是尚未运行或者无法运行。
■ online-服务实例处于启用状态,并且已成功启动。
■ uninitialized-此状态是所有服务在配置经过读取之前的初始状态。
SMF 概念
276 系统管理指南:基本管理• 2006 年7 月
SMF 清单
SMF 清单是一个XML 文件,其中包含与服务或服务实例相关的一整套属性。这些文件
存储在/var/svc/manifest 中。不应当使用清单来修改服务的属性。服务配置系统信息
库是配置信息的授权来源。要将清单中的信息引入到系统信息库中,必须运行svccfg
import 或者允许服务在系统引导过程中导入信息。
有关SMF 清单内容的完整说明,请参见service_bundle(4) 手册页。
SMF 配置文件
SMF 配置文件是一个XML 文件,其中列出了在系统引导时启用的一组服务实例。配置
文件存储在/var/svc/profile 中。下面是所包括的一些配置文件:
■ generic_open.xml-此配置文件可启用在早期Solaris 发行版中缺省启用的大多数标
准Internet 服务。这是缺省配置文件。
■ generic_limited_net.xml-此配置文件禁用许多标准Internet 服务。启动了sshd 服
务和NFS 服务,但是其余的多数Internet 服务处于禁用状态。
有关使用配置文件的更多信息,请参见第295 页中的“如何使用其他SMF 配置文件
”。
服务配置系统信息库
服务配置系统信息库存储服务的持久性配置信息以及SMF 运行时数据。系统信息库在
本地内存和本地文件之间分布。SMF 的设计旨在最终可以用网络目录服务表示服务数
据。网络目录服务尚不可用。服务配置系统信息库中的数据可实现许多Solaris 实例之
间的配置信息共享和管理简化。服务配置系统信息库只能使用SMF 界面进行处理和查
询。有关处理和访问系统信息库的更多信息,请参见svccfg(1M) 和svcprop(1) 手册
页。在svc.configd(1M) 手册页中介绍服务配置系统信息库守护进程。在libscf(3LIB)
手册页中对服务配置库进行了说明。
SMF 系统信息库备份
SMF 自动对系统信息库执行下列备份操作:
■ 在每次系统启动过程中,在即将对系统信息库进行首次更改之前,会执行引导备
份。
■ 在svc:/system/manifest-import:default 完成之后,如果manifest_import 备份导
入了任何新的清单,或者运行了任何升级脚本,则将发生此备份。
SMF 概念
第14 章• 管理服务(概述) 277
系统将为上述两种类型各维护四个备份。系统会在必要时删除最旧的备份。备份存储
为/etc/svc/repository -type-YYYYMMDD_HHMMSWS,其中YYYYMMDD(年、月
和日)和HHMMSS(小时、分钟和秒)是执行备份的日期和时间。请注意,小时格式
基于24 小时制。
在发生错误时,可以从这些备份中恢复系统信息库。为此,可使用
/lib/svc/bin/restore_repository 命令。有关更多信息,请参见第306 页中的“如何
修复已损坏的系统信息库”。
SMF 快照
服务配置系统信息库中的数据包括快照以及可编辑的配置。每个服务实例的相关数据
都存储在快照中。标准快照如下所示:
■ initial-在首次导入清单时提取
■ running-在执行服务的方法时使用
■ start-在最后一次成功启动时提取
始终使用running 快照执行SMF 服务。如果此快照不存在,系统将自动创建。
svcadm refresh 命令(有时后跟svcadm restart 命令)能够激活快照。svccfg 命令用于
查看或恢复到以前快照中的实例配置。
SMF 管理接口和编程接口
本节介绍在使用SMF 时可用的接口。
SMF 命令行管理实用程序
SMF 提供一组与SMF 交互,并完成标准管理任务的命令行实用程序。下列实用程序可
用来管理SMF。
表14–1服务管理工具实用程序
命令名称功能
inetadm 提供观察或配置由inetd 控制的服务的功能
svcadm 提供执行常见服务管理任务(如启用、禁用或重新启动服务实例)的
功能
svccfg 提供显示和处理服务配置系统信息库内容的功能
SMF 管理接口和编程接口
278 系统管理指南:基本管理• 2006 年7 月
表14–1 服务管理工具实用程序(续)
命令名称功能
svcprop 从服务配置系统信息库中检索属性值,并采用适用于shell 脚本的输
出格式
svcs 提供服务配置系统信息库中所有服务实例的服务状态的详细视图
服务管理配置库接口
SMF 提供一组编程接口,这些接口可用于通过svc.configd 守护进程与服务配置系统信
息库进行交互。此守护进程是对本地和远程系统信息库数据库的所有请求的仲裁程
序。系统将一组基本接口定义为与服务配置系统信息库中的服务进行最低级别的交
互。这些接口提供对所有服务配置系统信息库功能(如事务和快照)的访问。
对于许多开发者来说,只需要一组常见的任务即可与SMF 交互。这些任务在基本服务
的基础上作为易于使用的功能来实现,从而减轻了实现的难度。
SMF 组件
SMF 包括一个主重新启动器守护进程和多个委托的重新启动器。
SMF 主重新启动器守护进程
svc.startd 守护进程是Solaris OS 的主进程启动器和重新启动器。该守护进程负责管理
整个系统的服务相关性。该守护进程接管了init 以前的职责,即在适当的运行级启动
相应的/etc/rc*.d 脚本。首先,svc.startd 检索服务配置系统信息库中的信息。接
着,该守护进程在服务的相关性得以满足时启动服务。该守护进程还负责重新启动失
败的服务,并负责关闭不再满足相关性的服务。该守护进程通过事件(如进程停
止),借助于操作系统的可用性视图来跟踪服务状态。
SMF 委托的重新启动器
有些服务在启动时具有一组共同的行为。为了提供这些服务之间的共同性,委托的重
新启动器可能会负责这些服务。另外,委托的重新启动器可用来提供更复杂的或特定
于应用程序的重新启动行为。委托的重新启动器可以支持一组不同的方法,但是会将
相同的服务状态作为主重新启动器导出。重新启动器的名称随服务一同存储。委托的
重新启动器的最新示例是inetd,它能够按需启动Internet 服务,而不是使服务始终保
持运行。
SMF 组件
第14 章• 管理服务(概述) 279
SMF 和引导
SMF 提供用来引导系统的新方法。例如:
■ 有另外一个与all 里程碑相关联的系统状态。此里程碑不同于多用户init 状态,因
为SMF 只能识别定义的服务。如果您添加了服务(如第三方产品),那么,除非您
使用下面的命令,否则它们可能不会自动重新启动:
ok boot -m milestone=all
■ 如果使用某个里程碑引导系统,一定要同时使用-s 选项。如果未包括-s,则系统
将停留在引导系统时所处的里程碑状态。通过按Ctrl-D,系统将不会自动进入多用
户状态。可以使用以下命令进入多用户状态:
# svcadm milestone all
■ 在引导系统时,可以选择使用verbose 选项来查看更多的消息。缺省情况下,系统
将不显示这些消息。要在详细模式下引导,请使用以下命令:
ok boot -mverbose
SMF 兼容性
尽管现在许多标准的Solaris 服务由SMF 来管理,位于/etc/rc*.d 中的脚本仍能继续在
运行级转换中执行。包括在以前的Solaris 发行版中的多数/etc/rc*.d 脚本都已经作为
SMF 的一部分删除。其余的脚本能够继续运行,从而在不必将服务转换为使用SMF 的
情况下,添加第三方应用程序。
另外,对于要使用安装后的脚本改正的软件包,/etc/inittab 和/etc/inetd.conf 必须
可用。这些称为传统运行服务。通过运行inetconv 命令,可以将这些传统运行服务添
加到服务配置系统信息库中。您可以查看这些服务的状态,但是SMF 不支持进行其他
更改。使用此功能的应用程序将不会受益于SMF 所提供的精确的故障隔离。
转换为利用SMF 的应用程序可能无法再修改/etc/inittab 和/etc/inetd.conf 文件。
已转换的应用程序将不使用/etc/rc*.d 脚本。同样,新版本的inetd 不会在
/etc/inetd.conf 中查找项。
运行级
系统的运行级(又称作init 状态)定义用户可以使用哪些服务和资源。系统一次只能在
一个运行级下运行。
Solaris OS 具有八个运行级,下表对其进行了说明。在/etc/inittab 文件中,缺省的运
行级指定为运行级3。
SMF 和引导
280 系统管理指南:基本管理• 2006 年7 月
表14–2 Solaris 运行级
运行级Init 状态类型用途
0 电源关闭状态电源关闭关闭操作系统,以便可以安全地关闭系统电
源。
s 或S 单用户状态单用户以单用户身份运行,挂载并且能够访问某些
文件系统。
1 管理状态单用户访问所有可用的文件系统。用户登录功能处
于禁用状态。
2 多用户状态多用户用于正常操作。多个用户可以访问系统和所
有的文件系统。除NFS 服务器守护进程以外
的所有守护进程都在运行。
3 共享NFS 资源的多用户级别多用户用于共享NFS 资源情况下的正常操作。这是
Solaris OS 的缺省运行级。
4 替换多用户状态在缺省情况下未配置,但是可供客户使用。
5 电源关闭状态电源关闭关闭操作系统,以便可以安全地关闭系统电
源。如有可能,自动关闭支持此功能的系统
的电源。
6 重新引导状态重新引导将系统关闭到运行级0,然后重新引导到共享
NFS 资源的多用户级别(或者inittab 文件
中的任何缺省级别)。
另外,svcadm 命令可用于更改系统的运行级,方法是选择系统要在其下运行的里程
碑。下表显示了与每个里程碑相对应的运行级。
表14–3 Solaris 运行级和SMF里程碑
运行级SMF 里程碑FMRI
S milestone/single-user:default
2 milestone/multi-user:default
3 milestone/multi-user-server:default
确定系统的运行级
通过使用who -r 命令来显示运行级信息。
$ who -r
使用who -r 命令可以为以前的任何级别确定系统当前的运行级。
运行级
第14 章• 管理服务(概述) 281
示例14–1确定系统的运行级
本示例显示系统的当前运行级以及以前的运行级的相关信息。
$ who -r
. run-level 3 Dec 13 10:10 3 0 S
$
who -r 命令的输出说明
run-level 3 标识当前的运行级
Dec 13 10:10 标识上次更改运行级的日期
3 也标识当前的运行级
0 标识自上次重新引导以来系统处于该运行级的次

S 标识以前的运行级
/etc/inittab 文件
当您使用init 或shutdown 命令引导系统或更改运行级时,init 守护进程会通过从
/etc/inittab 文件中读取信息来启动进程。此文件为init 进程定义以下重要的项:
■ init 进程将重新启动的项
■ 在终止时要启动、监视和重新启动的进程
■ 在系统进入新运行级时执行的操作
/etc/inittab 文件中的每一项都具有以下字段:
id:rstate :action:process
下表描述了inittab 项中的字段。
表14–4 inittab 文件的字段说明
字段说明
id 项的唯一标识符。
rstate 列出此项适用的运行级。
action 标识如何运行在进程字段中指定的进程。可能的值包括:sysinit、boot、
bootwait、wait 和respawn。
有关其他操作关键字的说明,请参见inittab(4)。
/etc/inittab 文件
282 系统管理指南:基本管理• 2006 年7 月
表14–4 inittab 文件的字段说明(续)
字段说明
process 定义要执行的命令或脚本。
示例14–2 缺省的inittab 文件
以下示例显示随该Solaris 发行版安装的缺省inittab 文件。后面是该示例中每个输出行
的说明。
ap::sysinit:/sbin/autopush -f /etc/iu.ap (1)
sp::sysinit:/sbin/soconfig -f /etc/sock2path (2)
smf::sysinit:/lib/svc/bin/svc.startd >/dev/msglog 2<>/dev/msglog (3)
p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0 >/dev/msglog 2<>/dev/... (4)
1. 初始化STREAMS 模块
2. 配置套接字传输提供器
3. 初始化SMF 的主重新启动器
4. 描述因电源故障而造成的关机
当系统能够在运行级3 下工作时出现的情况
1. init 进程将启动,并读取/etc/default/init 文件以设置任何环境变量。缺省情况
下,仅设置TIMEZONE 变量。
2. 然后,init 读取inittab 文件并执行下列操作:
a. 执行action 字段中包含sysinit 的所有进程项,以便在用户登录之前执行所有特
殊的初始化。
b. 将启动活动传递到svc.startd。
有关init 进程如何使用inittab 文件的详细说明,请参见init(1M)。
下表描述了在运行级3 的action 字段中使用的关键字。
表14–5 运行级3 的操作关键字说明
关键字说明
powerfail 在init 进程收到电源故障信号时启动powerfail 进程
respawn 启动该进程并在其中止时重新启动
wait 启动该进程,等待它完成后转至此运行级的下一项
下表描述了在运行级3 执行的进程(或命令)。
/etc/inittab 文件
第14 章• 管理服务(概述) 283
表14–6 运行级3 的命令说明
命令或脚本的名称说明
/usr/sbin/shutdown 关闭系统。只有当系统收到电源故障信号时,init 进程才
运行shutdown 命令。
/sbin/rcS 检查和挂载root (/)、/usr、/tmp、/var、/var/adm 和
/var/run 文件系统。
/sbin/rc2 启动标准的系统进程,将系统启动到运行级2(多用户级
别)。
/sbin/rc3 针对运行级3 启动NFS 资源共享功能。
运行控制脚本
Solaris 软件提供一系列详细的运行控制(rc) 脚本,这些脚本可用来控制对运行级进行
的更改。每个运行级都有一个与之相关的rc 脚本,该脚本位于/sbin 目录中:
■ rc0
■ rc1
■ rc2
■ rc3
■ rc5
■ rc6
■ rcS
对于/sbin 目录中的每个rc 脚本,有一个名为/etc/rcn.d 的相应目录,其中包含执行
该运行级的各种操作所需的脚本。例如,/etc/rc2.d 包含用来启动和停止运行级2 的
进程的文件。
# ls /etc/rc2.d
K03samba S42ncakmod S81dodatadm.udaplt
K05volmgt S47pppd S89PRESERVE
K06mipagent S65ipfboot S89bdconfig
K07dmi S69mrouted S90wbem
K07snmpdx S70sckm S93cacheos.finish
K16apache S70uucp S94ncalogd
K27boot.server S72autoinstall S95ncad
README S73cachefs.daemon S95networker
S10lu S75savecore S98deallocate
S20sysetup S80lp S99audit
S40llc2 S80spc
/etc/rcn.d 脚本总是按ASCII 排序顺序运行。脚本的名称具有如下形式:
[KS][0-9][0-9]*
运行控制脚本
284 系统管理指南:基本管理• 2006 年7 月
运行以K 开头的文件可以终止(中止)系统服务。运行以S 开头的文件可以启动系统服
务。
运行控制脚本位于/etc/init.d 目录中。这些文件链接到/etc/rc n.d 目录中相应的运
行控制脚本。
下一节概述了每个运行控制脚本的操作。
运行控制脚本摘要
以下几节概述了在更改运行级时用来启动和停止系统服务的运行控制脚本。
/sbin/rc0 脚本
/sbin/rc0 脚本运行/etc/rc0.d 脚本以执行下列任务:
■ 停止系统服务和守护进程
■ 终止所有正在运行的进程
■ 卸载所有的文件系统
/sbin/rc1 脚本
/sbin/rc1 脚本运行/etc/rc1.d 脚本以执行下列任务:
■ 停止系统服务和守护进程
■ 终止所有正在运行的用户进程
■ 卸载所有的远程文件系统
■ 挂载所有的本地文件系统(如果以前的运行级为S)
/sbin/rc2 脚本
/sbin/rc2 脚本运行/etc/rc2.d 脚本以执行下列任务,这些任务按功能进行分组:
与本地系统有关的任务:
■ 启动系统记帐和系统审计功能(如果已配置)
■ 设置缺省的调度类(如果/etc/dispadmin.conf 文件存在)
■ 配置串行设备流
■ 配置WBEM(基于Web 的企业管理)服务
与网络服务或安全有关的任务:
■ 启动逻辑链路控制器(llc2)(如果已配置)
■ 配置Solaris 网络缓存和加速器(Network Cache and Accelerator,NCA) 和NCA 日志记
录(如果适用)
■ 启动Solaris PPP 服务器或客户机守护进程(pppoed 或pppd)(如果已配置)
运行控制脚本
第14 章• 管理服务(概述) 285
■ 启动目录服务器(slapd) 守护进程(如果已配置)
■ 配置系统资源控制和系统池(如果/etc/rctladm.conf 和/etc/pooladm.conf 文件存
在)
■ 启动htt_server 进程
与安装有关的任务:
■ 在系统启动或关闭时为Live Upgrade 软件配置引导环境
■ 检查/etc/.UNCONFIGURE 文件是否存在,查看是否应当重新配置系统
■ 从安装介质或引导服务器重新引导系统(如果/.PREINSTALL 或/AUTOINSTALL 存在)
与硬件有关的任务:
■ 启动Sun FireTM 15000 密钥管理守护进程(sckmd)(如果适用)
■ 运行快擦写存储器更新脚本
■ 配置任何图形框架缓冲区或图形加速器
在运行级更改之间转换下列服务:
■ Apache (tomcat)
■ 移动IP (mipagent)
■ Samba(smdb 和nmdb)
■ Solstice Enterprise AgentsTM 守护进程( dmispd 和snmpXdmid)
注– 在运行级2 启动的许多系统服务和应用程序取决于系统上安装的软件。
/sbin/rc3 脚本
/sbin/rc3 脚本运行/etc/rc3.d 脚本以执行下列任务:
■ 启动Apache 服务器守护进程(tomcat)(如果已配置)
■ 启动移动IP 守护进程(mipagent)(如果已配置)
■ 启动Samba 守护进程(smdb 和nmdb )(如果已配置)
■ 启动Solstice Enterprise Agents 守护进程(dmispd 和snmpXdmid)
/sbin/rc5 和/sbin/rc6 脚本
/sbin/rc5 和/sbin/rc6 脚本运行/etc/rc0.d/K* 脚本以执行下列任务:
■ 中止所有的活动进程
■ 卸载文件系统
/sbin/rcS 脚本
/sbin/rcS 脚本运行/etc/rcS.d 脚本以将系统启动到运行级S。此脚本启动wrsmconf 来
管理WCI RSM 控制器配置。
运行控制脚本
286 系统管理指南:基本管理• 2006 年7 月
管理服务(任务)
本章介绍了管理和监视服务管理工具(ServiceManagement Facility, SMF) 所需的任务。另
外,本章还提供了与管理运行级脚本有关的信息。本章包含以下主题:
■ 第287 页中的“管理SMF 服务(任务图)”
■ 第288 页中的“监视SMF 服务”
■ 第291 页中的“管理SMF 服务”
■ 第296 页中的“配置SMF 服务”
■ 第302 页中的“使用运行控制脚本”
■ 第305 页中的“对服务管理工具进行疑难解答”
管理SMF 服务(任务图)
以下任务图说明了使用SMF 所需的过程。
任务说明参考
显示服务实例的状态。显示所有正在运行的服务实例的状态。第288 页中的“如何列出服务的状态”
显示服务相关项。显示依赖指定服务的服务。第290 页中的“如何显示依赖某个服务
实例的服务”
显示服务的相关性。显示指定服务所依赖的服务。此信息可
用来帮助确定阻止服务启动的因素。
第290 页中的“如何显示某个服务所依
赖的服务”
禁用服务实例。关闭未正常工作或需要关闭以增强安全
性的服务。
第291 页中的“如何禁用服务实例”
启用服务实例启动服务。第292 页中的“如何启用服务实例”
重新启动服务实例。重新启动服务,而不必使用单独的命令
先禁用服务,然后再启用服务。
第293 页中的“如何重新启动服务”
15 第1 5 章
287
任务说明参考
修改服务实例。修改指定服务实例的配置参数。第296 页中的“如何修改服务”
更改由inetd 控制的服务的配置属性。第298 页中的“如何更改由inetd 控制
的服务的属性”
更改由inetd 控制的服务的启动选项。第300 页中的“如何修改由inetd 控制
的服务的命令行参数”
转换inetd.conf 项。将inetd 服务转换为可使用SMF 来监视
的传统运行服务。
第301 页中的“如何转换inetd.conf
项”
修复损坏的服务配置系统信息库。将损坏的系统信息库替换为缺省版本。第306 页中的“如何修复已损坏的系统
信息库”
不用里程碑引导系统。不用里程碑引导系统,以便可以修复那
些阻止引导的配置问题。
第309 页中的“如何在引导过程中以交
互方式启动服务”
监视SMF 服务
下列任务显示如何监视SMF 服务。
▼ 如何列出服务的状态
以下过程可用来显示哪些服务正在运行。
运行svcs 命令。
在不使用任何选项的情况下运行此命令,会显示由FMRI 指定的服务的状态报告。
% svcs -l FMRI
显示rlogin 服务的状态
以下示例显示包括许多合同的服务的状态。
% svcs -l network/login:rlogin
fmri svc:/network/login:rlogin
enabled true
state online
next_state none
restarter svc:/network/inetd:/default

示例15–1
监视SMF 服务
288 系统管理指南:基本管理• 2006 年7 月
contract_id 42325 41441 40776 40348 40282 40197 39025 38381 38053/
33697 28625 24652 23689 15352 9889 7194 6576 6360 5387 1475 3015/
6545 6612 9302 9662 10484 16254 19850 22512 23394 25876 26113 27326/
34284 37939 38405 38972 39200 40503 40579 41129 41194
显示sendmail 服务的状态
以下示例显示包括相关性的服务的状态。
% svcs -l network/smtp:sendmail
fmri svc:/network/smtp:sendmail
enabled true
state online
next_state none
restarter svc:/system/svc/restarter:default
contract_id 29462
dependency require_all/refresh file://localhost/etc/nsswitch.conf (-)
dependency require_all/refresh file://localhost/etc/mail/sendmail.cf (-)
dependency optional_all/none svc:/system/system-log (online)
dependency require_all/refresh svc:/system/identity:domain (online)
dependency require_all/refresh svc:/milestone/name-services (online)
dependency require_all/none svc:/network/service (online)
dependency require_all/none svc:/system/filesystem/local (online)
显示所有服务的状态
以下命令列出系统上安装的所有服务以及每个服务的状态。该命令既显示已禁用的服
务又显示已启用的服务。
% svcs -a
示例15–2
示例15–3
监视SMF 服务
第15 章• 管理服务(任务) 289
显示由inetd 控制的服务的状态
以下命令列出由inetd 控制的服务,其中包括每个服务的FMRI、运行状态以及服务是
处于启用还是禁用状态。
% inetadm
▼ 如何显示依赖某个服务实例的服务
以下过程显示如何确定依赖指定服务的服务实例。
显示服务相关项。
% svcs -D FMRI
显示依赖多用户里程碑的服务实例
以下示例显示如何确定依赖多用户里程碑的服务实例。
% svcs -D milestone/multi-user
STATE STIME FMRI
online Apr_08 svc:/milestone/multi-user-server:default
▼ 如何显示某个服务所依赖的服务
以下过程显示如何确定指定的服务实例所依赖的服务。
显示服务相关性。
% svcs -d FMRI
显示多用户里程碑所依赖的服务实例
以下示例显示多用户里程碑所依赖的服务实例。
% svcs -d milestone/multi-user:default
STATE STIME FMRI
disabled Aug_24 svc:/platform/sun4u/sf880drd:default
online Aug_24 svc:/milestone/single-user:default
示例15–4

示例15–5

示例15–6
监视SMF 服务
290 系统管理指南:基本管理• 2006 年7 月
online Aug_24 svc:/system/utmp:default
online Aug_24 svc:/system/system-log:default
online Aug_24 svc:/system/system-log:default
online Aug_24 svc:/system/rmtmpfiles:default
online Aug_24 svc:/network/rpc/bind:default
online Aug_24 svc:/milestone/name-services:default
online Aug_24 svc:/system/filesystem/local:default
online Aug_24 svc:/system/mdmonitor:default
管理SMF 服务
本节包括有关管理SMF 服务的信息。
对于SMF 使用RBAC 权利配置文件
可以使用RBAC 权利配置文件来允许用户管理某些SMF 服务,而不必授予用户root 访
问权限。权利配置文件定义用户可以运行哪些命令。已经为SMF 创建了下列配置文件

■ Service Management用户可以添加、删除或修改服务。
■ Service Operator-用户可以请求对任何服务实例的状态进行更改(如重新启动和
刷新)。
有关授权的具体信息,请参见smf_security(5) 手册页。有关指定权利配置文件的说
明,请参见《系统管理指南:安全性服务》中的“如何更改用户的RBAC 属性”。
▼ 如何禁用服务实例
请使用以下过程禁用服务。服务状态更改记录在服务配置系统信息库中。服务一旦被
禁用,其禁用状态将持续到重新引导之后。使服务重新运行的唯一方法就是启用服
务。
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
1
管理SMF 服务
第15 章• 管理服务(任务) 291
检查要禁用的服务的相关项。
如果此服务具有所需的相关项,则无法禁用此服务。
# svcs -D FMRI
禁用此服务。
# svcadm disable FMRI
禁用rlogin 服务
第一个命令的输出表明rlogin 服务没有相关项。本示例中的第二个命令禁用rlogin 服
务。第三个命令显示rlogin 服务实例处于禁用状态。
# svcs -D network/login:rlogin
# svcadm disable network/login:rlogin
STATE STIME FMRI
# svcs network/login:rlogin
STATE STIME FMRI
disabled 11:17:24 svc:/network/login:rlogin
▼ 如何启用服务实例
请使用以下过程启用服务。服务状态更改记录在服务配置系统信息库中。服务一旦被
启用,则只要符合服务相关性,系统每次重新引导后仍将保持该启用状态。
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
确定是否满足服务相关性。
如果服务处于启用状态,则说明满足了服务相关性。否则,请使用svcadm enable -r
FMRI 以递归方式启用所有的相关性。
# svcs -l FMRI|grep enabled
启用服务。
# svcadm enable FMRI
2
3
示例15–7
1
2
3
管理SMF 服务
292 系统管理指南:基本管理• 2006 年7 月
启用rlogin 服务
本示例中的第二个命令启用rlogin 服务。第三个命令显示rlogin 服务实例处于联机状
态。
# svcs -l network/login:rlogin|grep enabled
enabled false
# svcadm enable network/login:rlogin
# svcs network/login:rlogin
STATE STIME FMRI
online 12:09:16 svc:/network/login:rlogin
在单用户模式下启用服务
以下命令启用rpcbind。-t 选项在不更改服务系统信息库的临时模式下启动服务。在单
用户模式下,系统信息库不可写。-r 选项以递归方式启动指定服务的所有相关性。
# svcadm enable -rt rpc/bind
▼ 如何重新启动服务
如果由于配置更改或其他原因而需要重新启动当前正在运行的服务,那么,可以重新
启动该服务,而不必键入单独的命令来先停止后启动该服务。只有必须在禁用服务之
后、启用服务之前更改配置时,才需要特意地先禁用服务,然后再启用。
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
重新启动服务。
# svcadm restart FMRI
▼ 如何恢复处于维护状态的服务
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
示例15–8
示例15–9
1
2
1
管理SMF 服务
第15 章• 管理服务(任务) 293
确定依赖该服务的任何进程是否已停止。
通常,当某个服务实例处于维护状态时,与该实例相关的所有进程均已停止。但是,
您应当在继续操作之前确保这一点。以下命令将列出与某个服务实例相关的所有进程
以及这些进程的PID(进程标识符)。
# svcs -p FMRI
(可选的)中止剩余的所有进程。
对于由svcs 命令显示的所有进程重复上述步骤。
# pkill -9 PID
如有必要,请修复服务配置。
有关错误的列表,请查看/var/svc/log 中相应的服务日志文件。
恢复此服务。
# svcadm clear FMRI
▼ 如何恢复到另一个SMF 快照
如果服务配置有误,则可以通过恢复到上次成功启动的快照来修复问题。在以下过程
中,使用的是console-login 服务以前的快照。
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
运行svccfg 命令。
# svccfg
svc:>
a. 选择要修复的服务实例。
注– 必须使用对该实例进行完全定义的FMRI,而不允许使用快捷方式。
svc:> select system/console-login:default
svc:/system/console-login:default>
b. 创建可用快照的列表。
svc:/system/console-login:default> listsnap
2
3
4
5
1
2
管理SMF 服务
294 系统管理指南:基本管理• 2006 年7 月
initial
running
start
svc:/system/console-login:default>
c. 选择或恢复到start 快照。
start 快照是上次成功启动服务时的快照。
svc:/system/console-login:default> revert start
svc:/system/console-login:default>
d. 退出svccfg。
svc:/system/console-login:default> quit
#
更新服务配置系统信息库中的信息。
该步骤用start 快照中的配置信息更新系统信息库。
# svcadm refresh system/console-login
重新启动服务实例。
# svcadm restart system/console-login
▼ 如何使用其他SMF 配置文件
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
选择要使用的SMF 配置文件。
在本示例中使用的是generic_limited_net.xml 配置文件。
# svccfg apply /var/svc/profile/generic_limited_net.xml
3
4
1
2
管理SMF 服务
第15 章• 管理服务(任务) 295
配置SMF 服务
▼ 如何修改服务
以下过程显示如何更改不是由inetd 服务管理的服务的配置。
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
根据需要对配置文件进行更改。
许多服务都有一个或多个用来定义启动或其他配置信息的配置文件。这些文件可以在
服务正在运行时进行更改。只有当服务已经启动后,才能检查这些文件的内容。
重新启动服务。
# svcadm restart FMRI
共享NFS 文件系统
要使用NFS 服务共享文件系统,必须在/etc/dfs/dfstab 文件中定义NFS 文件系统,然
后重新启动NFS 服务。以下示例显示dfstab 文件的外观以及如何重新启动服务。
# cat /etc/dfs/dfstab
.
.
share -F nfs -o rw /export/home
# svcadm restart svc:/network/nfs/server
▼ 如何更改服务的环境变量
以下过程显示如何修改cron 环境变量以帮助进行调试。
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
1
2
3
示例15–10
1
配置SMF 服务
296 系统管理指南:基本管理• 2006 年7 月
检验该服务是否正在运行。
# svcs system/cron
STATE STIME FMRI
online Dec_04 svc:/system/cron:default
设置环境变量。
在本示例中,设置的是UMEM_DEBUG 和LD_PRELOAD 环境变量。有关setenv 子命令的信
息,请参阅svccfg(1M) 手册页。
# svccfg -s system/cron:default setenv UMEM_DEBUG default
# svccfg -s system/cron:default setenv LD_PRELOAD libumem.so
刷新和重新启动该服务。
# svcadm refresh system/cron
# svcadm restart system/cron
检验是否已进行更改。
# pargs -e ‘pgrep -f /usr/sbin/cron‘
100657: /usr/sbin/cron
envp[0]: LOGNAME=root
envp[1]: LD_PRELOAD=libumem.so
envp[2]: PATH=/usr/sbin:/usr/bin
envp[3]: SMF_FMRI=svc:/system/cron:default
envp[4]: SMF_METHOD=/lib/svc/method/svc-cron
envp[5]: SMF_RESTARTER=svc:/system/svc/restarter:default
envp[6]: TZ=GB
envp[7]: UMEM_DEBUG=default
#
2
3
4
5
配置SMF 服务
第15 章• 管理服务(任务) 297
▼ 如何更改由inetd 控制的服务的属性
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
列出指定服务的属性。
以下命令显示由FMRI 标识的服务的所有属性。
# inetadm -l FMRI
更改该服务的属性。
由inetd 控制的服务的每个属性都由属性名和指定的值来定义。提供属性名而不指定值
会将属性重置为缺省值。有关服务属性的具体信息应包含在与该服务相关的手册页
中。
# inetadm -m FMRI property-name=value
检验属性是否已更改。
再次列出属性以确保已进行相应的更改。
# inetadm -l FMRI
确认更改已生效。
确认属性更改达到了所需的效果。
更改telnet 的tcp_trace 属性
以下示例显示如何将telnet 的tcp_trace 属性设置为true。在运行telnet 命令之后,
检查syslog 的输出,此时会发现所做的更改已经生效。
# inetadm -l svc:/network/telnet:default
SCOPE NAME=VALUE
name="telnet"
.
.
default inherit_env=TRUE
default tcp_trace=FALSE
default tcp_wrappers=FALSE
1
2
3
4
5
示例15–11
配置SMF 服务
298 系统管理指南:基本管理• 2006 年7 月
# inetadm -m svc:/network/telnet:default tcp_trace=TRUE
# inetadm -l svc:/network/telnet:default
SCOPE NAME=VALUE
name="telnet"
.
.
default inherit_env=TRUE
tcp_trace=TRUE
default tcp_wrappers=FALSE
# telnet localhost
Trying 127.0.0.1...
Connected to localhost.
Escape character is ’^]’.
login: root
Password:
Last login: Mon Jun 21 05:55:45 on console
Sun Microsystems Inc. SunOS 5.10 s10_57 May 2004
# ^D
Connection to localhost closed by foreign host.
# tail -1 /var/adm/messages
Jun 21 06:04:57 yellow-19 inetd[100308]: [ID 317013 daemon.notice] telnet[100625]
from 127.0.0.1 32802
配置SMF 服务
第15 章• 管理服务(任务) 299
▼ 如何修改由inetd 控制的服务的命令行参数
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
列出特定服务的exec 属性。
以下命令显示由FMRI 标识的服务的所有属性。添加grep 命令会将输出限制在该服务
的exec 属性。
# inetadm -l FMRI|grep exec
更改该服务的exec 属性。
具有exec 属性的command-syntax 集定义在启动服务时运行的命令字符串。
# inetadm -m FMRI exec="command-syntax"
检验属性是否已更改。
再次列出属性以确保已进行相应的更改。
# inetadm -l FMRI
向ftp 命令添加连接日志(-l) 选项
在以下示例中,当ftp 守护进程启动时,会向其中添加-l 选项。此更改的效果可通过
在ftp 登录会话已经完成之后,检查syslog 输出来查看。
# inetadm -l svc:/network/ftp:default | grep exec
exec="/usr/sbin/in.ftpd -a"
# inetadm -m svc:/network/ftp:default exec="/usr/sbin/in.ftpd -a -l"
# inetadm -l svc:/network/ftp:default
SCOPE NAME=VALUE
name="ftp"
endpoint_type="stream"
proto="tcp6"
isrpc=FALSE
wait=FALSE
1
2
3
4
示例15–12
配置SMF 服务
300 系统管理指南:基本管理• 2006 年7 月
exec="/usr/sbin/in.ftpd -a -l"
.
.
# ftp localhost
Connected to localhost.
220 yellow-19 FTP server ready.
Name (localhost:root): mylogin
331 Password required for mylogin.
Password:
230 User mylogin logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 236 bytes in 0 transfers.
221-Thank you for using the FTP service on yellow-19.
221 Goodbye.
# tail -2 /var/adm/messages
Jun 21 06:54:33 yellow-19 ftpd[100773]: [ID 124999 daemon.info] FTP LOGIN FROM localhost
[127.0.0.1], mylogin
Jun 21 06:54:38 yellow-19 ftpd[100773]: [ID 528697 daemon.info] FTP session closed
▼ 如何转换inetd.conf 项
以下过程将inetd.conf 项转换为SMF 服务清单。无论何时向系统添加依赖inetd 的第
三方应用程序,都需要运行此过程。如果您需要更改/etc/inetd.conf 中项的配置,也
需要运行此过程。
配置SMF 服务
第15 章• 管理服务(任务) 301
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
转换inetd.conf 项。
inetconv 命令将选定文件中的每个项都转换为服务清单。
# inetconv -i filename
将/etc/inet/inetd.conf 项转换为SMF 服务清单
# inetconv -i /etc/inet/inetd.conf
使用运行控制脚本(任务图)
任务说明参考
停止或启动服务。使用运行控制脚本停止或启动服务。第302 页中的“如何使用运行控制脚本来
停止或启动传统服务”
添加运行控制脚本。创建运行控制脚本并将其添加到/etc/init.d
目录中。
第304 页中的“如何添加运行控制脚本”
禁用运行控制脚本。通过重命名运行控制脚本文件来禁用该脚本。第305 页中的“如何禁用运行控制脚本”
使用运行控制脚本
▼ 如何使用运行控制脚本来停止或启动传统服务
每个运行级都有单独脚本的一个优点是,可以在/etc/init.d 目录中单独运行脚本来停
止系统服务,而不必更改系统的运行级。
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
停止系统服务。
# /etc/init.d/filename stop
重新启动系统服务。
# /etc/init.d/filename start
1
2
示例15–13
1
2
3
使用运行控制脚本(任务图)
302 系统管理指南:基本管理• 2006 年7 月
检验服务是否已停止或启动。
# pgrep -f service
使用运行控制脚本停止或启动服务
例如,可以通过键入以下命令来停止NFS 服务器守护进程:
# /etc/init.d/nfs.server stop
# pgrep -f nfs
然后,可以通过键入以下命令来重新启动NFS 服务器守护进程:
# /etc/init.d/nfs.server start
# pgrep -f nfs
101773
101750
102053
101748
101793
102114
# pgrep -f nfs -d, | xargs ps -fp
UID PID PPID C STIME TTY TIME CMD
daemon 101748 1 0 Sep 01 ? 0:06 /usr/lib/nfs/nfsmapid
daemon 101750 1 0 Sep 01 ? 26:27 /usr/lib/nfs/lockd
daemon 101773 1 0 Sep 01 ? 5:27 /usr/lib/nfs/statd
root 101793 1 0 Sep 01 ? 19:42 /usr/lib/nfs/mountd
daemon 102053 1 0 Sep 01 ? 2270:37 /usr/lib/nfs/nfsd
daemon 102114 1 0 Sep 01 ? 0:35 /usr/lib/nfs/nfs4cbd
4
示例15–14
使用运行控制脚本
第15 章• 管理服务(任务) 303
▼ 如何添加运行控制脚本
如果要添加用来启动和停止服务的运行控制脚本,请将该脚本复制到/etc/init.d 目录
中。然后,在要从其中启动和停止服务的rcn.d 目录中创建链接。
有关对运行控制脚本进行命名的更多信息,请参见每个/etc/rcn.d 目录中的README 文
件。以下过程介绍如何添加运行控制脚本。
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
将脚本添加到/etc/init.d 目录中。
# cp filename /etc/init.d
# chmod 0744 /etc/init.d/filename
# chown root:sys /etc/init.d/filename
创建指向相应rc n.d 目录的链接。
# cd /etc/init.d
# ln filename /etc/rc2.d/Snnfilename
# ln filename /etc/rcn.d/Knnfilename
检验脚本在指定的目录中是否具有链接。
# ls /etc/init.d/*filename /etc/rc2.d/*filename /etc/rcn.d/*filename
添加运行控制脚本
以下示例显示如何为xyz 服务添加运行控制脚本。
# cp xyz /etc/init.d
# chmod 0744 /etc/init.d/xyz
# chown root:sys /etc/init.d/xyz
# cd /etc/init.d
# ln xyz /etc/rc2.d/S99xyz
# ln xyz /etc/rc0.d/K99xyz
# ls /etc/init.d/*xyz /etc/rc2.d/*xyz /etc/rc0.d/*xyz
1
2
3
4
示例15–15
使用运行控制脚本
304 系统管理指南:基本管理• 2006 年7 月
▼ 如何禁用运行控制脚本
通过在文件名开头加一个下划线(_) 来重命名运行控制脚本可以禁用该运行控制脚本。
系统不执行以下划线或点开头的文件。如果通过为文件添加后缀的方法来复制该文
件,那么,带后缀和不带后缀的文件都将运行。
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
通过在新文件的开头添加下划线(_) 来重命名脚本。
# cd /etc/rcn.d
# mv filename _filename
检验脚本是否已重命名。
# ls _*
_filename
禁用运行控制脚本
以下示例显示如何重命名S99datainit 脚本。
# cd /etc/rc2.d
# mv S99datainit _S99datainit
# ls _*
_S99datainit
对服务管理工具进行疑难解答
▼ 调试未启动的服务
在该过程中,打印服务处于禁用状态。
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
1
2
3
示例15–16
1
对服务管理工具进行疑难解答
第15 章• 管理服务(任务) 305
请求有关挂起服务的信息。
# svcs -xv
svc:/application/print/server:default (LP Print Service)
State: disabled since Wed 13 Oct 2004 02:20:37 PM PDT
Reason: Disabled by an administrator.
See: http://sun.com/msg/SMF-8000-05
See: man -M /usr/share/man -s 1M lpsched
Impact: 2 services are not running:
svc:/application/print/rfc1179:default
svc:/application/print/ipp-listener:default
-x 选项提供有关受到影响的服务实例的其他信息。
启用服务。
# svcadm enable application/print/server
▼ 如何修复已损坏的系统信息库
以下过程显示如何将已损坏的系统信息库替换为缺省的系统信息库副本。系统信息库
守护进程svc.configd 在启动之后不会对配置系统信息库执行完整性检查。配置系统信
息库存储在/etc/svc/repository.db 中。配置系统信息库可能会由于以下某种原因而
损坏:
■ 磁盘故障
■ 硬件错误
■ 软件错误
■ 无意中覆写文件
如果完整性检查失败,svc.configd 守护进程会向控制台写入一条以下类似的消息:
svc.configd: smf(5) database integrity check of:
/etc/svc/repository.db
2
3
对服务管理工具进行疑难解答
306 系统管理指南:基本管理• 2006 年7 月
failed. The database might be damaged or a media error might have
prevented it from being verified. Additional information useful to
your service provider is in:
/etc/svc/volatile/db_errors
The system will not be able to boot until you have restored a working
database. svc.startd(1M) will provide a sulogin(1M) prompt for recovery
purposes. The command:
/lib/svc/bin/restore_repository
can be run to restore a backup version of your repository. See
http://sun.com/msg/SMF-8000-MY for more information.
随后,svc.startd 守护进程将退出,并启动sulogin,以便您进行维护。
在sulogin 提示符处输入root 密码。sulogin 使root 用户能够进入系统维护模式来修复
系统。
运行以下命令:
# /lib/svc/bin/restore_repository
运行此命令可指导您完成恢复未经损坏的备份所必需的步骤。SMF 会在系统的任何关
键时刻自动提取系统信息库的备份。有关更多信息,请参见第277 页中的“SMF 系统
信息库备份”。
在启动/lib/svc/bin/restore_repository 命令之后,会显示一条以下类似的消息:
Repository Restore utility
See http://sun.com/msg/SMF-8000-MY for more information on the use of
this script to restore backup copies of the smf(5) repository.
1
2
对服务管理工具进行疑难解答
第15 章• 管理服务(任务) 307
If there are any problems which need human intervention, this script
will give instructions and then exit back to your shell.
Note that upon full completion of this script, the system will be
rebooted using reboot(1M), which will interrupt any active services.
如果要恢复的系统不是本地区域,则该脚本将说明如何使用读取和写入权限来重新挂
载/ 和/usr 文件系统,以便恢复数据库。该脚本会在列显这些说明之后退出。请按照
这些说明执行操作,同时应特别注意可能出现的任何错误。
在使用写入权限挂载了root (/) 文件系统之后,或者如果该系统是本地区域,则系统将
提示您选择要恢复的系统信息库备份:
The following backups of /etc/svc/repository.db exists, from
oldest to newest:
... list of backups ...
基于备份类型和备份时间来确定备份的名称。以boot 开头的备份在系统引导之后、第
一次更改系统信息库之前完成。以manifest_import 开头的备份在
svc:/system/manifest-import:default 完成其进程之后完成。备份时间以
YYYYMMDD_HHMMSS 格式提供。
输入相应的响应。
通常会选择最新的备份选项。
Please enter one of:
1) boot, for the most recent post-boot backup
2) manifest_import, for the most recent manifest_import backup.
3) a specific backup repository from the above list
4) -seed-, the initial starting repository. (All customizations
will be lost.)
5) -quit-, to cancel.
3
对服务管理工具进行疑难解答
308 系统管理指南:基本管理• 2006 年7 月
Enter response [boot]:
如果在未指定要恢复的备份的情况下按Enter 键,则会选择用[] 括起的缺省响应。选
择-quit- 会退出restore_repository 脚本并返回到shell 提示符。
注– 选择-seed- 会恢复seed 系统信息库。此系统信息库旨在用于初始安装和升级期
间。如非万不得已,请勿使用seed 系统信息库进行恢复。
在选择了要恢复的备份之后,系统将对其进行验证并检查其完整性。如有任何问题,
restore_repository 命令会列显错误消息并提示您进行其他选择。在选择了有效的备
份之后,系统会列显如下信息,并提示您进行最终确认。
After confirmation, the following steps will be taken:
svc.startd(1M) and svc.configd(1M) will be quiesced, if running.
/etc/svc/repository.db
-- renamed --> /etc/svc/repository.db_old_YYYYMMDD_HHMMSS
/etc/svc/volatile/db_errors
-- copied --> /etc/svc/repository.db_old_YYYYMMDD_HHMMSS_errors
repository_to_restore
-- copied --> /etc/svc/repository.db
and the system will be rebooted with reboot(1M).
Proceed [yes/no]?
键入yes 修复故障。
在restore_repository 命令执行了列出的所有操作之后,系统将重新引导。
▼ 如何在引导过程中以交互方式启动服务
如果在启动服务时出现问题,有时系统会在引导过程中挂起。以下过程显示如何解决
此问题。
4
对服务管理工具进行疑难解答
第15 章• 管理服务(任务) 309
成为超级用户或承担包括Service Management 权限配置文件的角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南
:安全性服务》中的“配置RBAC”。
在不启动任何里程碑的情况下引导。
此命令指示svc.startd 守护进程临时禁用所有的服务并在控制台上启动sulogin。
ok boot -m milestone=none
以root 身份登录系统。
启用所有的服务。
# svcadm milestone all
确定引导过程挂起的位置。
当引导过程挂起时,通过运行svcs -a 来确定哪些服务未在运行。在/var/svc/log 中的
日志文件中查看错误消息。
在修复这些问题之后,检验是否所有的服务都可以启动。
a. 检验是否所有必需的服务都已联机。
# svcs -a
b. 检验是否满足console-login 服务的相关性。
以下命令检验控制台上的login 进程是否将运行。
# svcs -l system/console-login:default
继续执行正常的引导过程。
1
2
3
4
5
6
7
对服务管理工具进行疑难解答
310 系统管理指南:基本管理• 2006 年7 月 

posted on 2008-02-05 15:41  小土泥  阅读(510)  评论(0编辑  收藏  举报

导航