以降のセクションでは、デフォルトセットで提供されているマップの更新完了後に実行する手順について説明します。
マップが変更されたあと、Makefile は yppush を使用して、新しいマップをスレーブサーバーに伝播します (Makefile で NOPUSH が設定されていないかぎり)。これは、ypserv デーモンに通知してマップ転送要求を送ることで実行されます。次に、スレーブ上の ypserv デーモンが ypxfr プロセスを起動し、このプロセスがさらにマスターサーバー上の ypxfrd デーモンに接続します。いくつかの基本的なチェック (たとえば、マップが実際に変更されたかどうか) が行われたあと、そのマップが転送されます。そのあと、スレーブ上の ypxfr が yppush プロセスに、転送が成功したかどうかを示す応答を送信します。
svc:/network/rpc/bind サービスの config/local_only プロパティーは false に設定する必要があります。このようにしないと、NIS マスターが yppush コマンドを使用してマスターマップの更新バージョンを NIS スレーブサーバーに転送することができません。
ときには、マップの伝播に失敗し、ypxfr を使用して新しいマップ情報を手動で送信することが必要になる場合があります。ypxfr は、root の crontab ファイルを通して定期的に使用するか、またはコマンド行で対話的に使用するかの 2 つの異なる方法を選択できます。これらの方法については、以降のセクションで説明します。
マップの更新頻度はマップによってそれぞれ異なります。たとえば、デフォルトのマップにある protocols.byname や、デフォルト以外のマップにある auto_master など、一部のマップは何か月も変更されないことがあります。一方で、passwd.byname は 1 日に数回変更される場合があります。crontab コマンドを使用してマップ転送をスケジュールすると、個々のマップごとに特定の伝播回数を設定できます。
マップに適切な頻度で ypxfr を定期的に実行するには、各スレーブサーバー上の root の crontab ファイルに、該当する ypxfr エントリを入れる必要があります。ypxfr は、マスターサーバー上のコピーがローカルのコピーより新しい場合に限り、マスターサーバーと連絡をとりマップを転送します。
NIS 管理者は、各マップに対する crontab エントリを個々に作成するという方法ではなく、root の crontab コマンドでシェルスクリプトを実行してすべてのマップを定期的に更新するという方法を使用することもできます。マップ更新シェルスクリプトのサンプルは、/usr/lib/netsvc/yp ディレクトリに入っています。スクリプト名は、ypxfr_1perday、ypxfr_1perhour、ypxfr_2perday です。これらのシェルスクリプトは、サイトの要件に合うように変更したり、置き換えたりすることができます。次の例は、デフォルトの ypxfr_1perday シェルスクリプトを示しています。
使用例 7-1 ypxfr_1perday シェルスクリプト#! /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
このシェルスクリプトは、root の crontab が毎日実行される場合は 1 日に 1 回マップを更新します。また、1 週間に 1 回、1 か月に 1 回、1 時間に 1 回などの頻度でマップを更新するスクリプトを作成することもできます。ただし、マップを頻繁に伝播するとパフォーマンスが低下する可能性があることに注意してください。詳細は、crontab(1) のマニュアルページを参照してください。
NIS ドメイン用に構成された各スレーブサーバー上で root として同じシェルスクリプトを実行します。各サーバー上の実行時間を変更して、マスターサーバーが動作不能にならないようにしてください。
特定のスレーブサーバーからマップを転送する場合は、シェルスクリプト内で ypxfr の –h machine オプションを使用します。シェルスクリプトに記述するコマンドの構文は、次のとおりです。
# /usr/lib/netsvc/yp/ypxfr –h machine [ –c ] mapname
machine は転送するマップが存在するサーバー名です。mapname は要求されたマップ名です。マシンを指定することなく –h オプションを指定すると、ypxfr はマスターサーバーからマップを取得しようとします。ypxfr 実行時に ypserv がローカルに実行されていない場合は、ypxfr がローカル ypserver に現在のマップ要求の取消しを送信しないよう、–c フラグを使用してください。
–s domain オプションを使用すると、別のドメインからローカルドメインにマップを転送できます。これらのマップは、ドメイン間で同じである必要があります。たとえば、2 つのドメインで同じ services.byname および services.byaddr マップを共有する可能性があります。あるいは、より細かく制御するために、rcp または rsync を使用してドメイン間でファイルを転送することもできます。
ypxfr コマンドの 2 番目の起動方法は、コマンドとしての実行です。一般に、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 で 1 週間に 1 回実行させることができます。記録を取らないようにするには、ログファイルを削除してください。