扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
过去,UNIX 操作系统包含一组服务:这些服务是与任何交互式用户登录都不关联的软件程序,用于侦听和响应请求以执行特定的任务(如传送电子邮件、响应 ftp 请求,或允许执行远程命令)。这些传统服务通常是一些单独的应用程序,它们作为单个进程执行,在系统引导时启动,并在系统启动和运行时持续执行,可处理接收到的任何请求。
如今,管理员必须管理一系列服务,这些服务的作用已经超出了此原始模型的作用范围。Sun 推出了 Service Management Facility(SMF,服务管理工具),以简化这些系统服务的管理。SMF 是 Solaris 操作系统的一项新功能,为每个 Solaris 系统上的服务和服务管理创建支持的、统一的模型。它是 Solaris 10 中预测性自我修复技术的核心部分,为软件和硬件故障以及管理错误提供自动恢复功能。
在本指南中,我们将介绍 SMF 的功能及优势,指出 Solaris 中显著更新的部分,并说明如何使用 SMF 完成典型的管理任务。可以在 Sun 的 BigAdmin Web 站点上找到 SMF 及预测性自我修复功能的详细指南。
功能
Service Management Facility 已经改进了 Solaris 管理模型的几个方面。一些最显著的更新包括:
◆ 服务由可以进行查看(使用新的 svcs(1) 命令)和管理(使用 svcadm(1M) 和 svccfg(1M))的一级对象表示。
◆ 无论失败的服务是由管理员错误、软件错误导致,还是受无法更正的硬件错误的影响,这些服务都将按照相关性顺序自动重新启动。
◆ 可以获取有关配置错误或行为异常的服务的详细信息,包括对服务未运行的原因的说明(使用 "svcs -x"),以及每个服务单独的持久性日志文件。
◆ 引导过程中出现的问题比较容易调试,因为在启动故障期间可以控制引导详细程度,记录服务启动消息,以及提供更可靠的控制台访问。
◆ 自动拍摄服务配置快照,从而更容易备份、恢复和撤消对服务所做的更改。
◆ 可以使用受支持的工具 (svcadm(1M)) 启用和禁用服务,从而允许更改不受升级和修补程序的影响而保留原样。
◆ 管理员可以更容易地将任务安全地委派给非超级用户,这些任务包括配置、启动、停止或重新启动服务(如 smf_security(5) 手册页中所述)。
◆ 根据服务的相关性并行启动服务,可以更快地引导大型系统。
尽管进行了上述更改,但最大程度地保留了与现有管理习惯的兼容性。例如,大多数站点本地的 "rc" 脚本和 ISV 提供的 "rc" 脚本仍将有效。
显著的更改
SMF 提供的大多数新功能都在“后台”工作,或通过新命令进行访问;但某些更改仍会很快显示出来。以下显示了其中的一些更改。
在早期版本的 Solaris 中,大量输出将在引导期间打印到系统控制台。尽管这些消息对所发生的情况进行了比较深入的阐述,但在某些方面并不十分有用。少数服务可能会打印消息,表明它们已联机,而许多其他服务则不打印消息。某些故障模式也可能会打印一些消息(如 "WARNING:Timed out waiting for NIS to come up"),这些消息并不能帮助诊断根本问题。错误消息有时直接打印到控制台,但不会在任何日志中显示。
现在,引导过程中显示的消息精简了许多。以下是在 SMF 下引导时计算机所显示内容的示例:
SunOS Release 5.10 Version Generic 64-bit
Copyright 1983-2004 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
Hostname: demobox
NIS domain name is testlab.example.com
checking ufs filesystems
demobox console login:
尽管打印的消息变少了,但 SMF 使得引导过程更加清晰。每个服务在 /var/svc/log 目录(对于在单个用户的重大事件之前启动的服务,则为 /etc/svc/volatile 目录)中都有一个日志文件,指出服务启动的时间和方式、是否成功启动,以及在初始化期间可能打印的所有消息。如果在引导期间发生严重问题,则您可以在维护模式下登录到控制台,并可使用 svcs(1) 命令帮助诊断此问题。即使问题导致引导挂起(如上面提到的 NIS 故障)时也是如此。最后,新的 "-m" 引导选项(请参见 kernel(1M))允许您将引导过程配置得更加详细,可以在每个服务启动时打印一条简单消息。
您可能还会注意到,中止进程后进程会“拒绝中止”。例如:
# ps -fp `pgrep -d, sendmail`
UID PID PPID C STIME TTY TIME CMD
root 330 1 0 14:21:05 ? 0:00 /usr/lib/sendmail -bd -q15m
smmsp 331 1 0 14:21:05 ? 0:00 /usr/lib/sendmail -Ac -q15m
# pkill -9 sendmail
# ps -fp `pgrep -d, sendmail`
UID PID PPID C STIME TTY TIME CMD
root 530 1 0 14:51:02 ? 0:00 /usr/lib/sendmail -bd -q15m
smmsp 531 1 0 14:51:02 ? 0:00 /usr/lib/sendmail -Ac -q15m
初看起来,尽管使用了 kill -9,却似乎没有发生任何情况。但是请注意,PID 是不同的,并且进程的启动时间已经更改;事实上,旧的 sendmail 进程确实已经中止。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者