作为为每个映射创建单独的 crontab 项的备选方法,您可能更喜欢让根 crontab 命令运行可定期更新所有映射的 shell 脚本。用于更新映射的 shell 脚本样例位于 /usr/lib/netsvc/yp 目录中。这些脚本名为 ypxfr_1perday、ypxfr_1perhour 和 ypxfr_2perday。您可以修改或替换这些 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 将尝试从主服务器中获取映射。如果执行 ypxfr 时 ypserv 未在本地运行,则必须使用 -c 标志,以使 ypxfr 不向本地 ypserver 发送清除当前映射的请求。
可以使用 -s domain 选项从其他域向本地域传送映射。这些映射在各个域中应该相同。例如,两个域可能共享相同的 services.byname 和 services.byaddr 映射。或者,也可以使用 rcp 或 rdist 来获取更多控制,以便跨域传送文件。