服务器 频道

网管经验谈:灵活设置Solaris的SMF服务

    【IT168 专稿】前文(12)主要介绍了使用SMF来管理Solaris 10系统服务的监控和管理部分,这里会介绍设置SMF服务、使用脚本来管理服务和使用SMF进行调试和修复的方法。

一、 如何修改服务

    1 修改smf服务

    以下过程显示如何更改不是由 inetd 服务管理的服务的步骤:
 成为超级用户或承担包括 Service Management 权限配置文件的角色。
 根据需要对配置文件进行更改。
 重新启动服务。

    # svcadm restart FMRI

    说明:许多服务都有一个或多个用来定义启动或其他配置信息的配置文件。这些文件可以在服务正在运行时进行更改。只有当服务已经启动后,才能检查这些文件的内容。我们看一个例子:

    更改NFS 文件系统共享的目录

    要更改 NFS 服务共享文件系统,必须在 /etc/dfs/dfstab 文件中定义 NFS 文件系统,然后重新启动 NFS 服务。以下示例显示 dfstab 文件的外观以及如何重新启动服务。
# cat /etc/dfs/dfstab cat /etc/dfs/dfstab share -F nfs -o rw=engineering -d "home dirs" /export/home2 # svcadm restart svc:/network/nfs/server
    2 查看、修改服务的环境变量

    Unix(包括Solaris)是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。

    (1) 使用set命令显示所有本地定义的Shell变量,如图1


    图1 用set命令显示所有本地定义的Shell变量

    从图1可以看到登录的用户名称(root),终端号(6),SSh ip地址和端口等信息。

    (2) 使用env命令显示所有的环境变量
# env HOME=/ LANG=zh_CN.GB18030 LOGNAME=root MAIL=/var/mail//root PATH=/usr/sbin:/usr/bin SHELL=/sbin/sh SSH_CLIENT=192.168.206.12 1048 22 SSH_CONNECTION=192.168.206.12 1048 192.168.206.129 22 SSH_TTY=/dev/pts/6 TERM=xterm TZ=PRC USER=root
    (3) 修改环境变量的步骤

    以下过程显示如何修改 cron 环境变量以帮助进行调试。cron 系统可处理所有基于时间的命令执行计划,并提供了可用于在特定时间运行命令的两个不同解决方案。

 成为超级用户或承担包括 Service Management 权限配置文件的角色。
 检验该服务是否正在运行。
# svcs system/cron STATE STIME FMRI online 19:06:04 svc:/system/cron:default  查看修改前的环境变量 使用命令:pargs -e `pgrep -f /usr/sbin/cron`
    命令输出如图2 。


    图2查看修改前的环境变量
 设置环境变量。
    下面笔者设置的是 UMEM_DEBUG 环境变量。使用命令如下:
# svccfg -s system/cron:default setenv UMEM_DEBUG default  刷新和重新启动该服务 使用命令如下: # svcadm refresh system/cron # svcadm restart system/cron  检验修改是否生效 使用命令:pargs -e `pgrep -f /usr/sbin/cron`
    命令输出如图3 。

    图3检验修改是否生效

    对比图2和图3 可以看到修改后的环境变量是:
    envp[7]: UMEM_DEBUG=default
    3更改由inetd 控制的服务的属性的步骤

 成为超级用户或承担包括 Service Management 权限配置文件的角色。
 列出指定服务的属性。
    以下命令显示由 FMRI 标识的服务的所有属性。
    # inetadm -l FMRI
 更改该服务的属性。

    由 inetd 控制的服务的每个属性都由属性名和指定的值来定义。提供属性名而不指定值会将属性重置为缺省值。有关服务属性的具体信息应包含在与该服务相关的手册页中。
    # inetadm -m FMRI property-name=value
 检验属性是否已更改。
    再次列出属性以确保已进行相应的更改。
    # inetadm -l FMRI
    确认更改已生效。
    确认属性更改达到了所需的效果。


    下面看一个例子:
    将 telnet 的 tcp_trace 属性设置为 true。

    (1)首先查看telnet服务
    # inetadm -l svc:/network/telnet:default
    命令输出如图4 。


    图4首先查看telnet服务

    从图4 黑色标记部分可以看到现在telnet 的 tcp_trace 属性设置为false。

    (2)使用命令修改
    #inetadm -m svc:/network/telnet:default tcp_trace=TRUE

    (3)重新查看telnet服务
    # inetadm -l svc:/network/telnet:default
    命令输出如图5 。


    图5重新查看telnet服务

    从图5 黑色标记部分可以看到现在telnet 的 tcp_trace 属性设置为 true。

    另外在运行 telnet 命令之后,检查 syslog 的输出,此时会发现所做的更改已经生效。使用命令:tail -1 /var/adm/messages 。
二、 使用脚本来管理服务

    每个运行级都有单独脚本的一个优点是,可以在 /etc/init.d 目录中单独运行脚本来停止系统服务,而不必更改系统的运行级。

    1 使用运行控制脚本来停止或启动传统服务的步骤:

 成为超级用户或承担包括 Service Management 权限配置文件的角色。
 停止系统服务。
    # /etc/init.d/filename stop
 重新启动系统服务。
    # /etc/init.d/filename start
 检验服务是否已停止或启动。
    # pgrep -f service

     下面以nfs服务为例子:
    (1) 首先关闭nfs服务
    /etc/init.d/nfs.server stop
    (2) 查看nfs服务
    pgrep -f nfs
    (3) 重新启动nfs服务
    /etc/init.d/nfs.server start
    (4) 重新查看nfs服务
# pgrep -f nfs -d, | xargs ps -fp UID PID PPID C STIME TTY TIME CMD daemon 239 1 0 19:06:07 ? 0:00 /usr/lib/nfs/statd daemon 246 1 0 19:06:09 ? 0:00 /usr/lib/nfs/lockd
    2 添加运行控制脚本的步骤

    如果要添加用来启动和停止服务的运行控制脚本,请将该脚本复制到 /etc/init.d 目录中。然后,在要从其中启动和停止服务的 rcn.d 目录中创建链接。以下步骤介绍如何添加运行控制脚本。
 成为超级用户或承担包括 Service Management 权限配置文件的角色。
 将脚本添加到 /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
    3 运行控制脚本

    以下示例显示如何重命名 S99datainit 脚本。
    # cd /etc/rc2.d

    # mv S99datainit _S99datainit
三、 SMF服务的调试和修复

    1 自动修复已损坏的SMF系统信息库

    系统信息库守护进程 svc.configd 在启动之后不会对配置系统信息库执行完整性检查。配置系统信息库存储在 /etc/svc/repository.db SMF系统信息库中。配置系统信息库可能会由于以下某种原因而损坏:磁盘故障,硬件错误,软件错误,无意中覆写文件。如果完整性检查失败,svc.configd 守护进程会向控制台写入一条消息,随后,svc.startd 守护进程将退出,并启动 sulogin,以便您进行维护。步骤如下:
 在 sulogin 提示符处输入 root 密码。sulogin 使 root 用户能够进入系统维护模式来修复系统。
    运行以下命令:
    # /lib/svc/bin/restore_repository
    运行此命令可指导您完成恢复未经损坏的备份所必需的步骤。SMF 会在系统的任何关键时刻自动提取系统信息库的备份。

    2 手工修复已损坏的SMF系统信息库

    步骤如下:
 成为超级用户或者授权角色用户
 停止svc.startd daemon #pstop ‘pgrep svc.startd’  停止svc.configd daemon #pkill svc.configd  保存当前数据库 #cp /etc/svc/repository.db /etc/svc/repository.bad  用备份数据库替换当前库。 #cp /lib/svc/seed/global.db /etc/svc/repository.db
    3 在系统启动时如何交互式启动服务

 成为超级用户或者授权角色用户
 不启动svc.startd daemon,但是在控制台启动sulogin
    ok boot –m milestone=none
 以root登陆到系统
 启动所有服务:
    #svcadm milestone –t all
 查看那些服务没有启动:
    #svcs -l
 然后修复这些问题,检查这些服务是否启动。
    a. 检查所有服务是否在线使用命令:
    #svcs -l
    b. 检查login进程是否在运行使用命令:
    #svcs –l system/console-login:default
 继续系统启动进程

    4 当SMF服务没有启动时如何处理

    假设打印服务处于禁用状态,处理步骤:
 成为超级用户或者授权角色用户
 查看问题服务信息
    #svcs –xv
    输出如图6 。


    图6查看问题服务信息
 修复后,重新启动问题服务。
    #svcadm enable application/print/server
 重新查看服务信息 

    使用svcs -a 命令查看服务,如图7 。


    图7 使用svcs -a 命令查看

    从图7 的最后三行已经处于online状态了。

    总结:到此为止smf服务系列文章全部介绍完了,主要介绍了管理和监视服务管理工具 (Service Management Facility, SMF) 所需的任务。另外,本章还提供了与管理运行级脚本有关的信息。Solaris 10引入全新的后台服务管理机制,该机制被称为SMF,它包含了新的概念、管理工具和服务定义方式。比如用里程碑(milestone)代替了运行级别的概念;用服务配置库代替分散在/etc/rcx.d目录的服务启动脚本。通过使用SMF技术,系统中所有的服务可以在一个统一而强大的平台中进行配置和管理。同时,它也是预测性自愈技术的组成部分,可以自我侦测各服务的运行状态,尽可能地减少服务下线的机率。另外,利用SMF 技术系统管理员可以降低系统维护难度,减少人为出错机会。
0
相关文章