以下各节介绍完成更新随缺省集合提供的映射之后进行的其他过程。
更改映射后,Makefile 将使用 yppush 将新映射传播到从属服务器(除非在 Makefile 中设置了 NOPUSH)。它会通知 ypserv 守护进程并发送映射传送请求以完成此操作。然后,从属服务器上的 ypserv 守护进程会启动 ypxfr 进程,然后该进程将与主服务器上的 ypxfrd 守护进程联系。将执行某些基本检查(例如映射是否已真正更改?),然后传送映射。从属服务器上的 ypxfr 然后将向 yppush 进程发送一个响应来指示传输是否成功。
svc:/network/rpc/bind 服务的 config/local_only 属性必须设置为 false。否则,NIS 主服务器无法通过使用 yppush 命令将更新后的 NIS 主服务器版本映射到 NIS 从属服务器。
有时候,映射无法传播,这时必须使用 ypxfr 手动发送新映射信息。您可以选择以两种不同方式使用 ypxfr:通过 root crontab 文件定期使用,或在命令行中交互使用。这些方法将在以下各节中进行讨论。
不同映射的更改速度有所不同。例如,某些映射可能数月不更改一次,如缺省映射中的 protocols.byname 和非缺省映射中的 auto_master。不过,passwd.byname 可能一天更改数次。使用 crontab 命令调度映射传送,可以为各个映射设置特定的传播时间。
要以适合于映射的速度定期运行 ypxfr,每台从属服务器中的根 crontab 文件应包含适当的 ypxfr 项。ypxfr 与主服务器联系,并仅在主服务器中的副本比本地副本更新时才传送映射。
作为为每个映射创建单独的 crontab 项的备选方法,您可能更喜欢让根 crontab 命令运行 shell 脚本来定期更新所有映射。用于更新映射的 shell 脚本样例位于 /usr/lib/netsvc/yp 目录中。这些脚本名为 ypxfr_1perday、ypxfr_1perhour 和 ypxfr_2perday。您可以修改或替换这些 shell 脚本来满足站点需要。以下示例显示的是缺省 ypxfr_1perday shell 脚本。
示例 3 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 脚本会每天更新一次映射。您还可以具有其他脚本,用以每周更新一次映射、每月更新一次映射、每小时更新一次映射,等等。不过请注意,频繁传播映射会引起性能降低。有关更多信息,请参见 crontab(1) 手册页。
在为 NIS 域配置的每台从属服务器上,以 root 用户的身份运行相同的 shell 脚本。逐个更改每台服务器上确切的执行时间,以避免使主服务器陷入停顿状态。
如果要从特定的从属服务器中传送映射,请在 shell 脚本中使用 ypxfr 的 –h machine 选项。放入脚本中的命令的语法如下所示。
# /usr/lib/netsvc/yp/ypxfr –h machine [ –c ] mapname
其中,machine 是要传送的映射所在服务器的名称,mapname 是所请求的映射的名称。如果使用了 –h 选项但未指定计算机,ypxfr 将尝试从主服务器中获取映射。如果执行 ypxfr 时 ypserv 未在本地运行,则必须使用 –c 标志,以使 ypxfr 不向本地 ypserver 发送清除当前映射的请求。
您可以使用 –s domain 选项从其他域向本地域传送映射。这些映射在各个域中必须相同。例如,两个域可能会共享相同的 services.byname 和 services.byaddr 映射。另外,为实现更多的控制,可以使用 rcp 或 rsync 来跨域传送文件。
调用 ypxfr 命令的另一种方法是将其作为命令来运行。通常,只在异常情况下才使用此方法-例如,在设置临时 NIS 服务器来创建测试环境时或在尝试使断开服务的 NIS 服务器快速与其他服务器保持一致时。
ypxfr 的传送尝试和结果可以捕获并存储在日志文件中。如果存在名为 /var/yp/ypxfr.log 的文件,则会向该文件中附加结果。对于该日志文件的大小没有任何限制。为防止日志文件无限制地增大,请键入以下命令定期清空该文件。
# cd /var/yp # cp ypxfr.log ypxfr.log.old # cat /dev/null > /var/yp/ypxfr.log
可让 crontab 一周执行一次上述命令。要禁用日志记录,请删除日志文件。