分类:
2008-04-27 13:47:27
在早期版本的 Solaris 中,查看可用服务的唯一方法是使用 ps(1) 命令,并列出系统上所有的活动进程,然后查看与服务应用程序的名称相匹配的进程名称。遗憾的是,由于大多数系统都有许多进程,并且每次发行新版本的 Solaris 以及添加其他软件包时都会引入新服务,因此使用此方法进行跟踪非常困难。如今的许多服务已不再作为单个进程执行,这使得情况更加复杂。某些服务作为一系列进程或多线程进程执行,或者同时以这两种方式执行。
使用新的 svcs(1) 命令,可以更容易地观察系统服务的状态。"-p" 选项可显示与服务关联的所有进程:
% svcs -p network/smtp:sendmail
STATE STIME FMRI
online 18:20:30 svc:/network/smtp:sendmail
18:20:30 655 sendmail
18:20:30 657 sendmail
% ps -fp 655,657
UID PID PPID C STIME TTY TIME CMD
root 655 1 0 18:20:30 ? 0:01 /usr/lib/sendmail -bd -q15m
smmsp 657 1 0 18:20:30 ? 0:00 /usr/lib/sendmail -Ac -q15m
"-d" 选项可显示此服务所依赖的其他服务,而 "-D" 选项可显示依赖于此服务的其他服务:
% svcs -d network/smtp:sendmail
STATE STIME FMRI
online 18:20:14 svc:/system/identity:domain
online 18:20:26 svc:/network/service:default
online 18:20:27 svc:/system/filesystem/local:default
online 18:20:27 svc:/milestone/name-services:default
online 18:20:27 svc:/system/system-log:default
online 18:20:30 svc:/system/filesystem/autofs:default
% svcs -D network/smtp:sendmail
STATE STIME FMRI
online 18:20:32 svc:/milestone/multi-user:default
我们可以看到,sendmail 要求在运行之前先运行网络服务、本地文件系统服务、名称服务、系统日志守护进程以及自动安装守护进程,并且 sendmail 自身必须在到达多用户重大事件之前运行。服务启动时间(STIME 列)表明已遵循这些相关性。
◆更改运行级别
SMF 引入了重大事件 (milestone)的概念,它代替了传统的运行级别概念。运行级别对计算机上运行的一组服务进行了基本描述,这些服务通常分为一个用户登录到计算机控制台所需的服务(运行级别 S),以及多个用户登录到计算机所需的服务(运行级别 2 和 3)。这些系统状态在 SMF 中表示为重大事件,重大事件是代表一组其他服务的稳定服务。"svcs -d" 可用于查看必须在到达重大事件之前运行的服务。
svcadm(1M) 现在是设置系统缺省运行级别的首选方法。此方法是使用 milestone 子命令和有效重大事件的 FMRI 完成的:
----------------------------------------------------------------------------------------------
旧方法:编辑 /etc/inittab
SMF 方法:svcadm milestone -d milestone/single-user:default
----------------------------------------------------------------------------------------------
"-d" 选项表示缺省 (default) 重大事件应该设置为指定的 FMRI。如果不使用 "-d",则 "svcadm milestone" 会立即将系统转换到指定的重大事件。
引导过程已更新为可以识别重大事件。除了传统的 "boot -s"(引导到单用户模式)之外,现在还可以通过 "boot -m milestone=" 引导到指定的重大事件。 可以是 "single-user"、"multi-user" 或 "multi-user-server",以及特殊的重大事件 "all"(所有已启用的联机服务)和 "none"(无任何服务)。"none" 重大事件对于修复在引导过程初期发生故障的系统可能非常有用。
引导到单用户重大事件(使用 "-m milestone=single-user")和旧的 "boot -s" 略有不同。如果系统已明确引导到某个重大事件,则退出控制台管理 shell 时不会像 "boot -s" 一样将系统转换到多用户模式。要在运行 "boot -m milestone=single-user" 之后转到多用户模式,请使用命令 "svcadm milestone milestone/multi-user-server:default"。
◆启用、禁用和监视传统服务
一般说来,由传统 rc 脚本启动的服务(也称为传统服务)将继续以原始方式工作。这些服务将在 svcs(1) 的输出中显示,同时还显示 FMRI(基于服务 rc 脚本的路径名),但它们不受 svcadm(1M) 控制。应该通过直接运行 rc 脚本停止或启动这些服务。
如“显著的更改”部分所述,与早期版本的 Solaris 不同,rc 脚本可能不会在引导过程中的同一时刻运行。特别是,必须在 Solaris 提供的某些 rc 脚本之前运行的脚本可能会出现问题。但是,绝大多数脚本都应该可以继续工作,而不会出现任何问题。
◆将新服务添加到 inetd.conf
Internet 服务守护进程 inetd(1M) 已重新编写为 SMF 的一部分。它将所有配置数据都存储在 SMF 数据库(而不是 /etc/inet/inetd.conf)中,从而允许使用 SMF 工具控制和观察基于 inetd 的服务。大多数 Solaris 随附的基于 inetd 的服务在 inetd.conf 中不再有任何条目。为了对尚未转换为 SMF 的服务提供兼容性,仍然可以使用惯用的语法将条目添加到 inetd.conf 中,而新的 inetconv(1M) 命令可将新服务转换为 SMF 服务。inetconv 应该始终在编辑 /etc/inet/inetd.conf 之后运行;运行该命令时可以不使用任何参数。
详细信息
要了解有关 SMF 的详细信息,请参见以下文档:
◆ SMF 系统管理指南。
◆ 手册页(可在安装了 Solaris 10 的任何计算机上获取):
○ inetadm(1M)
○ inetconv(1M)
○ inetd(1M)
○ kernel(1M)
○ smf(5)
○ smf_bootstrap(5)
○ smf_method(5)
○ svc.startd(1M)
○ svcadm(1M)
○ svccfg(1M)
○ svcprop(1)
○ svcs(1)