Solaris10 SMF服务管理概要

概述
Solaris 10引入全新的后台服务管理机制,该机制被称为SMF,它包含了新的概念、管理工具和服务定义方式。

SMF相对于传统的Unix后台服务管理机制具有以下突出的功能:

  1. 自动恢复因为软硬件故障或管理错误而意外终止的服务
  2. 支持服务的依赖关系
  3. 一个服务可以有多个实例
  4. 提供了丰富的命令行管理工具
  5. 系统启动时可根据依赖关系,并发启动服务,加快启动的速度
  6. 使用服务配置库存放服务定义和配置,提供服务配置库快照、备份、恢复功能
这些功能既方便了服务的管理,又提高了服务的可用性。功能1也就是SMF服务的自愈功能,它是Solaris 10系统可预测自愈特性(Predictive Self-Healing)的一部分。

SMF中的概念

服务和服务实例
SMF中的服务可以有多个实例,服务实例继承服务的属性。

运行级别和服务里程碑
运行级别是指系统用户可用的服务和资源,里程碑是SMF引入的概念,在概念上它和运行级别是等价的。两者的对应关系如下:
运行级别 里程碑FMRI
S milestone/single-user:default
2 milestone/multi-user:default
3 milestone/multi-user-server:default
使用svcadm milestone 命令可以改变里程碑,但是不能改变系统当前的运行级别。


SMF组成要素
SMF包含两个进程、服务定义的manifest和profile、服务配置库和命令行管理工具等内容:
1. svc.startd, svc.configd
2. manifest, profile
3. repository(sqlite db)
4. CLI mgmt tool (svccfg, svcadm, svcprop, svcs, inetadm, inetconv, repository_restore)

svc.startd
svc.startd是SMF的主要进程,它根据系统管理员指令、系统故障、应用故障来启动、停止、重启服务。

svc.configd
svc.configd是负责管理服务配置库的进程。SMF命令行工具svccfg, svcprop, svcs, svcadm通过该进程访问服务配置库。

manifest, profile
服务和服务的实例用xml文件定义,manifest定义服务,profile定义一组服务,通常还定义服务实例。这些xml文件存放在/var/svc目录下。

repository
服务配置库存放在/etc/svc/repository.db文件中。服务配置库实际上是一个sqlite的关系数据库,它存放了服务的定义、配置等信息。Solaris 10在两种情况下将自动备份该文件:第一种情况是系统启动后;第二种情况是manifest-import服务导入新的配置后。系统会保留 每种类别的备份4个 历史版本,备份文件名称的格式为repository-type-YYYYMMDD_HHMMSWS。运行以下命令:
-bash-3.00# ls -lh /etc/svc
total 26036
lrwxrwxrwx 1 root root 31 Feb 12 01:58 repository-boot -> repository-boot-20060212_015840
-rw------- 1 root root 2.1M Feb 10 20:42 repository-boot-20060210_204239
-rw------- 1 root root 2.1M Feb 12 00:02 repository-boot-20060212_000213
-rw------- 1 root root 2.1M Feb 12 00:04 repository-boot-20060212_000403
-rw------- 1 root root 2.1M Feb 12 01:58 repository-boot-20060212_015840
lrwxrwxrwx 1 root root 42 Jan 30 15:27 repository-manifest_import -> repository-manifest_import-20060130_152710
-rw------- 1 root root 2.1M Jan 30 15:27 repository-manifest_import-20060130_152710
-rw------- 1 root sys 2.1M Feb 13 04:17 repository.db
drwxr-xr-x 2 root sys 5.1K Feb 13 05:37 volatile
列出当前系统中repository的备份情况,可见该系统进行了至少四次启动和一次manifest-import。如果需要将repository恢复到某个历史版本,可以使用/lib/svc/bin/restore_repository脚本。

repository和manifest,profile的关系
/var/svc目录下的manifest和profile文件和/etc/svc/repository.db文件都包含了服务的定义、配置等信息,后者的信息是权威的。
使用svccfg import命令可将SMF服务的manifest xml文件导入到repository中;
使用svccfg export命令可将repository中SMF服务的manifest信息导出到xml文件;
使用svccfg apply命令可将SMF服务的profile xml文件导入到repository中;
使用svccfg etract命令可将repository中SMF服务的profile信息导出到xml文件。
服务manifest-import用于将/var/svc中新增的SMF服务信息导入repository。

SMF中的服务命名
SMF中的服务命名方式和传统的Unix中的后台进程的命名方式有很大的差别,SMF服务名称是用FMRI(Fault Managed Resouce Identifier)表示的,FMRI是URI资源命名规范 在Solaris系统的一个应用。对于SMF服务,其格式是:
scheme:/category1/category2.../categoryn/service[:instance]
scheme有svc和lrc,svc模式的FMRI表示SMF服务,而lrc模式的FMRI表示旧的基于rc脚本的服务,lrc模式是为了向前兼容,不需要实例名。
用svcs -a可以列出当前所有的服务:
STATE STIME FMRI
legacy_run 1:58:26 lrc:/etc/rcS_d/S50sk98sol
legacy_run 1:58:50 lrc:/etc/rc3_d/S50apache
legacy_run 1:58:51 lrc:/etc/rc3_d/S75seaport
legacy_run 1:58:55 lrc:/etc/rc3_d/S76snmpdx
legacy_run 1:58:57 lrc:/etc/rc3_d/S90samba
...
disabled 1:58:06 svc:/network/iscsi_initiator:default
disabled 1:58:06 svc:/system/metainit:default
disabled 1:58:07 svc:/network/ipfilter:default
disabled 1:58:08 svc:/network/rpc/keyserv:default
disabled 1:58:08 svc:/network/rpc/nisplus:default
disabled 1:58:08 svc:/network/nis/client:default
disabled 1:58:08 svc:/network/dns/client:default
disabled 1:58:08 svc:/network/ldap/client:default
disabled 1:58:09 svc:/network/nfs/cbd:default
disabled 1:58:09 svc:/network/nfs/mapid:default
...
online 1:58:06 svc:/system/svc/restarter:default
online 1:58:08 svc:/network/pfil:default
online 1:58:10 svc:/network/loopback:default
online 1:58:11 svc:/milestone/name-services:default
online 1:58:12 svc:/system/filesystem/root:default
online 1:58:14 svc:/system/boot-archive:default
online 1:58:15 svc:/network/physical:default
online 1:58:15 svc:/milestone/network:default
online 1:58:20 svc:/application/print/cleanup:default
online 1:58:21 svc:/system/picl:default
online 1:58:21 svc:/system/sysevent:default
online 1:58:21 svc:/system/device/fc-fabric:default
online 1:58:22 svc:/milestone/devices:default
online 1:58:28 svc:/system/sysidtool:net
online 1:58:30 svc:/system/sysidtool:system
online 1:58:30 svc:/network/nfs/status:default
online 1:58:45 svc:/network/ssh:default
...

第三列FMRI就是服务名称。上述输出中显示了在Solaris 10中捆绑的Samba、Apache 1.3.x服务名称,由于它们仍然沿用了rc脚本的启动方式,所以它们的名称是以lrc开头的,这类服务无法用svcadm来管理。比如试图运行命令svcadm enable lrc:/etc/rc3_d/S90samba,系统会报错。上述输出中显示了ssh服务的FMRI服务名为svc:/network/ssh:default。
用FMRI表示的服务名称可以唯一地标识一个服务,但是名称通常都比较冗长,不便记忆。所以SMF允许服务名称的缩写,只要能唯一标识服务,scheme、instance、category都可以省略。所以ssh服务的名称可以简写成ssh。简写的服务名在SMF的命令行工具中都可以使用。

使用FMRI方法命名服务后使得原先的服务名称发生了变化,但通过以下方法可以找SMF服务的名称:
  1. 猜测法,根据该服务的关键词得一个可能的服务名(guess_service_name),如Apache web服务可以用apache,NFS文件服务可以用nfs。 然后用svcs -a |grep guess_service_name。
  2. 查看该服务所属应用的文档。

以下是常见服务的名称
服务 最简缩写 FMRI
sshd ssh svc:/network/ssh:default
cron cron svc:/system/cron:default
automount autofs svc:/system/filesystem/autofs:default
Apache2 apache2 svc:/system/filesystem/autofs:default
sendmail sendmail svc:/network/smtp:sendmail
nfs nfs/server svc:/network/nfs/server:default

管理SMF服务
管理SMF服务包括配置、查看、启用/禁用、启动/停止服务等任务。这些任务分别可以用svccfg, svcs, svcadm命令完成。

svccfg命令
svccfg命令用来管理SMF repository。运行不带参数的svccfg命令进入一个交互式的shell,在该shell里可以对服务、服务实例进行配置、导入、导出、备份、恢复操作。

最常用的操作是新增一个SMF服务时导入该服务的manifest文件,可以使用svccfg import 的方法。使用svccfg import时要注意在目前版本的Solaris中(版本小于等于Solaris 10 1/06 ),如果manifest xml文件语法有错,该命令不会报告xml文件出错的具体位置,只会报一个笼统的错误信息。例如,postfix.xml文件的service元素没有闭合,运行以下命令:
-bash-3.00# svccfg -v import postfix.xml
svccfg: couldn't parse document
该命令会报无法解析文档的错误。因此,编写完manifest xml文件应当验证一下文件的有效性。

svcs命令
svcs用于查看服务的状态,
svcs -a用于查看所有状态的服务
svcs -x用于查看未正常启动的服务
svcs -l 用于查看单个服务的详细信息

svcadm命令
svcadm用来启用/禁用、启动/停止SMF服务。
svcadm enable fmri -- 启用一个SMF服务,同时运行该服务
svcadm disable fmri -- 禁用一个SMF服务,同时停止该服务
svcadm restart fmri -- 重启一个SMF服务
svcadm refresh fmri -- 刷新一个SMF服务,相当于让服务重新载入配置文件
svcadm mark fmri -- 将SMF服务标记为维护状态
svcadm clear fmri -- 清除SMF服务的维护状态
svcadm milestone milestone -- 进入指定的服务里程碑,相当于进入相应的运行级别
如果不指定参数,svcadm将输出该命令的使用方法。
如:
-bash-3.00# svcadm
Usage: svcadm [-v] [cmd [args ... ]]

svcadm enable [-rst] ... - enable and online service(s)
svcadm disable [-st] ... - disable and offline service(s)
svcadm restart ... - restart specified service(s)
svcadm refresh ... - re-read service configuration
svcadm mark [-It] ... - set maintenance state
svcadm clear ... - clear maintenance state
svcadm milestone [-d] - advance to a service milestone

Services can be specified using an FMRI, abbreviation, or fnmatch(5)
pattern, as shown in these examples for svc:/network/smtp:sendmail

svcadm svc:/network/smtp:sendmail
svcadm network/smtp:sendmail
svcadm network/*mail
svcadm network/smtp
svcadm smtp:sendmail
svcadm smtp
svcadm sendmail

SMF服务排错
使用svcs -xv可以查找未正常启动的服务。SMF对每个服务实例都在/var/svc/log目录创建了一个和服务FMRI对应的日志文件,比如apache2服务的FMRI为svc:/network/http:apache2,那么apache2服务状态变化的日志存放在名为network-http:apache2.log的文件中,
如运行以下命令
-bash-3.00# ls -l /var/svc/log |grep network
-rw-r--r-- 1 root root 534 Feb 9 00:08 milestone-network:default.log
-rw-r--r-- 1 root root 77 Jan 30 15:25 network-dns-client:default.log
-rw-r--r-- 1 root root 169 Jan 30 15:27 network-dns-server:default.log
-rw-r--r-- 1 root root 803 Feb 13 01:17 network-http:apache2.log
-rw-r--r-- 1 root root 2843 Jan 30 15:30 network-inetd-upgrade:default.log
-rw-r--r-- 1 root root 2929 Feb 12 01:58 network-inetd:default.log
-rw-r--r-- 1 root root 2835 Feb 12 01:58 network-initial:default.log
-rw-r--r-- 1 root root 77 Jan 30 15:25 network-ipfilter:default.log
-rw-r--r-- 1 root root 77 Jan 30 15:25 network-iscsi_initiator:default.log
输出的第四行列出了apache2服务的日志文件名。通过查看这些文件可以获得服务未正常启动的线索。

SMF中的inetd服务
SMF包含了对inetd服务管理,除了标准的svccfg, svcadm, svcs命令外,SMF还提供了inetadm和inetconv专门管理inetd服务。inetadm命令用来查看、启用/禁用、修改inetd服务,inetconv则是用来将旧的inetd服务配置转化成SMF规范的服务。常用的inetadm选项如下
inetadm -e fmri 启用指定的inetd服务
inetadm -d fmri 禁用指定的inetd服务
inetadm -l fmri 列出指定inetd服务的属性
inetadm -p 列出默认inetd服务的属性
如果不指定参数inetadm将列出当前系统所有的inetd服务。如:
-bash-3.00# inetadm
ENABLED STATE FMRI
enabled online svc:/application/x11/xfs:default
enabled online svc:/application/font/stfsloader:default
enabled offline svc:/application/print/rfc1179:default
enabled online svc:/network/rpc/mdcomm:default
enabled online svc:/network/rpc/meta:default
enabled online svc:/network/rpc/metamed:default
enabled online svc:/network/rpc/metamh:default
enabled online svc:/network/rpc/gss:default
disabled disabled svc:/network/rpc/ocfserv:default
enabled online svc:/network/rpc/smserver:default
disabled disabled svc:/network/rpc/rex:default
enabled online svc:/network/rpc/rstat:default
enabled online svc:/network/rpc/rusers:default
disabled disabled svc:/network/rpc/spray:default
...
查看telnet服务的状态:
-bash-3.00# inetadm |grep telnet
enabled online svc:/network/telnet:default
禁用telnet服务
-bash-3.00# inetadm -d telnet
查看telnet服务的状态:
-bash-3.00# inetadm |grep telnet
disabled disabled svc:/network/telnet:default

SMF兼容旧的rc机制,solaris 10 2006 update 1版本中有些服务仍然使用了旧的rc机制,以运行级别3的服务为例,尚有以下服务未使用SMF:
-bash-3.00# ls -l /etc/rc3.d
total 30
-rw-r--r-- 1 root sys 1285 Jan 22 2005 README
-rwxr--r-- 6 root sys 474 Jan 22 2005 S16boot.server
-rwxr--r-- 6 root sys 1649 Jan 8 2005 S50apache
-rwxr-xr-x 1 root sys 491 Jan 8 2005 S75seaport
-rwxr--r-- 6 root sys 685 Jan 22 2005 S76snmpdx
-rwxr--r-- 6 root sys 1125 Jan 22 2005 S77dmi
-rwxr--r-- 6 root sys 512 Jan 22 2005 S81volmgt
-rwxr-xr-x 5 root sys 2225 Jan 8 2005 S82initsma
-rwxr--r-- 5 root sys 824 May 27 2004 S84appserv
-rwxr--r-- 6 root sys 324 Apr 20 2005 S90samba
其中S90samba,S50apache,S84appserv的存在表明Samba, Apache, Sun Application Server服务已启用。

总结
SMF提供了一个健壮的、可管理的后台服务管理机制,它使系统管理更为方便。在下一篇里作者将结合实例讨论将创建SMF服务的方法和步骤。

相关的手册
smf(5), svcadm(1M), svccfg(1M), inetadm(1M), svcs(1), svcprop(1), inetconv(1M)
相关的文件和目录
/etc/svc -- 存放SMF服务配置库
/var/svc/manifest -- 存放SMF服务manifest xml文件
/var/svc/profile -- 存放SMF服务profile xml文件
/var/svc/log -- 存放SMF服务状态变化日志
/lib/svc/method -- 存放SMF服务启动脚本
/lib/svc/seed -- 存放SMF服务配置库的出厂设置

参考信息
SMF快速入门
http://www.sun.com/bigadmin/content/selfheal/smf-quickstart.html
面向开发者的SMF介绍
http://www.sun.com/bigadmin/content/selfheal/sdev_intro.html
Solaris管理员手册:
System Administration Guide: Basic Administration Chapter 14 Managing Services (Overview),Chapter 15 Managing Services (Tasks)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值