《使用SMF管理Solaris 10系统服务攻略》

itisyang 2010-07-07

一、 监控SMF服务

1.查看所有服务的状态

使用命令:svcs–a

    图1是JDS桌面环境下的svcs –a 命令的输出。

    svcs 命令显示服务实例的状态(STATE)、开始时间(STIME)和 FMRI。每个服务的状态都为下列状态之一:

degraded-服务实例处于启用状态,但是以有限的功能运行。

disabled-服务实例处于禁用状态且尚未运行。

legacy_run-传统服务不由SMF进行管理,但是可查看服务。此状态只能由传统服务使用。

maintenance-服务实例遇到错误,必须由管理员解决。

offline-服务实例处于启用状态,但是尚未运行或者无法运行。

online-服务实例处于启用状态,并且已成功启动。

uninitialized-此状态是所有服务在配置经过读取之前的初始状态。

svc模式的FMRI表示SMF服务,而lrc模式的FMRI表示旧的基于rc脚本的服务。

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

    2 查看没有未正常启动的服务

使用命令:svcs–x

    图2是CDE桌面环境下的svcs –x 命令的输出。

    3. 显示由 FMRI 指定的服务的状态报告

以ssh服务为例:

svcs-lnetwork/ssh:default

fmrisvc:/network/ssh:default

名称SSHserver

启用是

状态online

next_statenone

state_time2007年6月24日21时8分01秒

logfile/var/svc/log/network-ssh:default.log

    重启程序 svc:/system/svc/restarter:default

    4. 显示某个服务所依赖的服务     以ssh服务为例:

#svcs -d network/ssh:default

    5显示依赖于某个服务的其他服务     以ssh服务为例:

#svcs -D network/ssh:default

solaris里由inetd统一管理诸如ftp,telnet等网络服务

可以用 svcs -a | grep ftp 和 svcs -a | grep telnet 命令检查目前两个服务的运行状态

如果返回

disable                          svc:/network/ftpd:default

disable                          svc:/network/telnetd:default

可以执行

svcadm  enable  svc:/network/ftpd:default

svcadm  enable  svc:/network/telnetd:default

启动服务

二、 管理SMF服务

可以使用RBAC权利配置文件来允许用户管理某些SMF服务,而不必授予用户root访问权限。权利配置文件定义用户可以运行哪些命令。

1禁用一个服务:telnet

以前,人们使用telnet这样的工具来进行远程管理unix系统,但是后来由于非法访问者手段的不断提高,telnet被证明为一个不安全的访问方法而遭到无情的抛弃。让人不可思议的是:既然telnet不安全,那sun为何还要默认启动telnet服务。所以需要马上进行关闭这个服务的步骤:

成为超级用户或承担包括ServiceManagement权限配置文件的角色。

检查要禁用的服务的相关项。

如果此服务具有所需的相关项,则无法禁用此服务。

禁用此服务。

图3是禁用一个服务telnet的三个命令步骤:

#svcs -D network/telnet:default

#svcs disable telnet

#svcs -D network/telnet:default

 第一个命令的输出表明 telnet服务没有相关项。本示例中的第二个命令禁用 telnet服务。第三个命令显示 telnet服务确实处于禁用状态。

同样的方法关闭rlogin等其他不需要的服务。

2启用一个服务

服务一旦被禁用,其禁用状态将持续到重新引导之后。使服务重新运行的唯一方法就是启用服务。

成为超级用户或承担包括ServiceManagement权限配置文件的角色。

确定是否满足服务相关性。

如果服务处于启用状态,则说明满足了服务相关性。否则,请使用svcadmenable-rFMRI以递归方式启用所有的相关性。

#svcs-lFMRI|grepenabled

启用服务。

#svcadmenableFMRI

以rlogin服务为例子。

图4是启用一个服务rlogin的三个命令步骤:

图4是启用一个服务rlogin的三个命令步骤

第一个命令的输出说明满足了服务相关性。,第二个命令启用rlogin服务。第三个命令显示rlogin服务实例处于联机状态。

3如何重新启动服务

如果由于配置更改或其他原因而需要重新启动当前正在运行的服务,那么,可以重新启动该服务,而不必键入单独的命令来先停止后启动该服务。只有必须在禁用服务之后、启用服务之前更改配置时,才需要特意地先禁用服务,然后再启用。使用命令:

    # svcadm restart FMRI

下面是重新启动ssh命令:

    # svcadm restart ssh

4 如何恢复处于维护状态的服务

?成为超级用户或承担包括ServiceManagement权限配置文件的角色。

?确定依赖该服务的任何进程是否已停止。

说明:通常当某个服务实例处于维护状态时,与该实例相关的所有进程均已停止。但是,您应当在继续操作之前确保这一点。以下命令将列出与某个服务实例相关的所有进程以及这些进程的PID(进程标识符)。

#svcs-pFMRI

?中止剩余的所有进程。

对于由svcs命令显示的所有进程重复上述步骤。

#pkill-9PID

如有必要,请修复服务配置。有关错误的列表,请查看/var/svc/log中相应的服务日志文件。

?恢复此服务方法:

#svcadmclearFMRI

5如何恢复到另一个SMF快照

如果一个服务配置有误,则可以通过恢复到上次成功启动的快照来修复问题。在以下过程中,使用的是console-login服务以前的快照。

?成为超级用户或承担包括ServiceManagement权限配置文件的角色。

?运行svccfg命令。

#svccfg

svc:>

?选择要修复的服务实例。

注意这里必须使用对该实例进行完全定义的FMRI,而不允许使用快捷方式。

svc:>selectsystem/console-login:default

svc:/system/console-login:default>

?创建可用快照的列表。

svc:/system/console-login:default>listsnap

initial

running

start

svc:/system/console-login:default>

?选择或恢复到start快照。

start快照是上次成功启动服务时的快照。

svc:/system/console-login:default>revertstart

svc:/system/console-login:default>

?退出svccfg。

svc:/system/console-login:default>quit

?更新服务配置系统信息库中的信息。

该步骤用start快照中的配置信息更新系统信息库。

#svcadmrefreshsystem/console-login

?重新启动服务

#svcadmrestartsystem/console-login

6SMF中的inetd服务

SMF包含了对inetd服务管理,除了标准的svccfg,svcadm,svcs命令外,SMF还提供了inetadm和inetconv专门管理inetd服务。inetadm命令用来查看、启用/禁用、修改inetd服务,inetconv则是用来将旧的inetd服务配置转化成SMF规范的服务。常用的inetadm选项如下:

inetadm-efmri启用指定的inetd服务

inetadm-dfmri禁用指定的inetd服务

inetadm-lfmri列出指定inetd服务的属性

inetadm-p列出默认inetd服务的属性

如果不指定参数inetadm将列出当前系统所有的inetd服务。

?显示由inetd控制的服务

    使用命令:

说明:命令输出较长中间部分省略。命令列出由 inetd 控制的服务,其中包括每个服务的 FMRI、运行状态以及服务是处于启用还是禁用状态。

?使用inetadm禁用telnet服务

    这里可以使用inetadm的方法禁用telnet服务,步骤如下:

图6使用inetadm禁用telnet服务

第一个命令的输出表明telnet服务在启用状态。本示例中的第二个命令禁用telnet服务。第三个命令显示telnet服务确实处于禁用状态。

    总结:本文主要介绍了使用SMF来管理Solaris 10系统服务的监控和管理部分,后边会介绍设置SMF服务、使用脚本来管理服务和使用SMF进行调试和修复的方法。

相关推荐