系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)

如何更新随缺省集提供的映射

使用以下过程可以更新随缺省集提供的映射。

  1. 成为主服务器上的超级用户。

    请始终只在主服务器上修改 NIS 映射。

  2. 无论要更改的映射的源文件位于 /etc 中还是位于您选择的其他某个目录中,都对该文件进行编辑。

  3. 键入以下命令。


    # cd /var/yp
    
    # make mapname
    

    然后,make 命令将根据您在其相应文件中所做的更改来更新映射。该命令还会在其他服务器中传播更改。

传播 NIS 映射

更改映射后,Makefile 将使用 yppush 向从属服务器传播新映射(除非在 Makefile 中设置了 NOPUSH。)它通过通知 ypserv 守护进程和发送映射传送请求来完成此操作。然后,从属服务器上的 ypserv 守护进程会启动 ypxfr 进程,该进程反过来与主服务器上的 ypxfrd 守护进程联系。在进行一些基本检查(例如,映射是否真的发生了更改?)后,便会传送映射。然后,从属服务器上的 ypxfr 将向 yppush 进程发送响应,指明传送是否成功。


注意 –

上述过程适用于新创建的、但从属服务器中尚不存在的映射。必须通过在从属服务器上运行 ypxfr 将新映射发送给从属服务器。


有时候,映射无法传播,必须使用 ypxfr 手动发送新映射信息。可以选择以两种不同方法使用 ypxfr:通过根 crontab 文件定期使用,或在命令行中交互使用。这些方法将在以下各节中进行讨论。

cron 用于映射传送

不同的映射具有不同的更改速率。例如,有些映射有时候几个月都不更改一次(如缺省映射中的 protocols.byname 以及非缺省映射中的 auto_master);但 passwd.byname 可能一天就会进行多次更改。使用 crontab 命令调度映射传送可为各映射设置特定的传播时间。

要以适合于映射的速率定期运行 ypxfr,每台从属服务器中的根 crontab 文件都应包含相应的 ypxfr 项。ypxfr 将与主服务器联系,并仅在主服务器中的副本比本地副本更新时才传送映射。


注意 –

如果主服务器运行带有缺省 -m 选项的 rpc.yppasswdd,则每次有人更改 yp 口令时,passwd 守护进程都会运行 make,以重新生成 passwd 映射。


将 Shell 脚本用于 cronypxfr

作为为每个映射创建单独的 crontab 项的备选方法,您可能更喜欢让根 crontab 命令运行可定期更新所有映射的 shell 脚本。用于更新映射的 shell 脚本样例位于 /usr/lib/netsvc/yp 目录中。这些脚本名为 ypxfr_1perdayypxfr_1perhourypxfr_2perday。您可以修改或替换这些 shell 脚本以满足站点需要。实例 6–1 显示了缺省 ypxfr_1perday shell 脚本。


实例 6–1 ypxfr_1perday Shell 脚本


#! /bin/sh

#

# ypxfr_1perday.sh - Do daily yp map check/updates

PATH=/bin:/usr/bin:/usr/lib/netsvc/yp:$PATH

export PATH

# set -xv

ypxfr group.byname

ypxfr group.bygid

ypxfr protocols.byname

ypxfr protocols.bynumber

ypxfr networks.byname

ypxfr networks.byaddr

ypxfr services.byname

ypxfr ypservers

如果根 crontab 每天执行一次,此 shell 脚本可以每天更新一次映射。还可以使脚本以其他频率更新映射(如每周一次、每月一次、每小时一次等等)。但请注意,频繁传播映射会降低性能。

在为 NIS 域配置的每台从属服务器上,以超级用户的身份运行相同的 shell 脚本。逐台服务器更改确切的执行时间,以避免使主服务器陷入停顿状态。

如果要从特定的从属服务器中传送映射,请在 shell 脚本中使用 ypxfr-h machine 选项。放入脚本中的命令的语法如下所示。


# /usr/lib/netsvc/yp/ypxfr -h machine [ -c ] mapname

其中,machine 是要传送的映射所在服务器的名称,mapname 是所请求的映射的名称。如果使用 -h 选项而不指定计算机,ypxfr 将尝试从主服务器中获取映射。如果执行 ypxfrypserv 未在本地运行,则必须使用 -c 标志,以使 ypxfr 不向本地 ypserver 发送清除当前映射的请求。

可以使用 -s domain 选项从其他域向本地域传送映射。这些映射在各个域中应该相同。例如,两个域可能共享相同的 services.bynameservices.byaddr 映射。或者,也可以使用 rcprdist 来获取更多控制,以便跨域传送文件。

直接调用 ypxfr

另一种调用 ypxfr 的方法是将其作为命令来运行。通常,只在异常情况下使用此方法-例如,通过设置临时 NIS 服务器来创建测试环境时或在尝试使断开服务的 NIS 服务器快速与其他服务器保持一致时。

记录 ypxfr 活动

可在日志文件中捕获 ypxfr 的传送尝试和结果。如果存在名为 /var/yp/ypxfr.log 的文件,则会向该文件中附加结果。对于该日志文件的大小没有任何限制。为防止日志文件无限制地增大,请通过键入以下命令不断清空该文件。


# cd /var/yp

# cp ypxfr.log ypxfr.log.old

# cat /dev/null > /var/yp/ypxfr.log

可让 crontab 一周执行一次上述命令。要禁用日志记录,请删除日志文件。