RWHOD(8)

名称
rwhod - システムステータスサーバ

書式
rwhod

解説
rwhod は、 rwho(1) や ruptime(1) で使われるデータベースを管理するサーバです。ここでの操作は、 ネットワークのブロードキャストメッセージの能力にもとづいています。

rwhod は、ステータス情報の生産者と消費者として振る舞います。 情報の生産者としては、定期的にシステムの状態を問い合わせ、状態 メッセージとして、ネットワークにブロードキャストします。情報の消費者 としては、他の rwhod サーバからの状態メッセージを待ち、それを受け取ると、 メッセージの正当性をチェックしてから、 /var/rwho ディレクトリの下にファイルとして集めて記録します。

サーバは、``who'' サービスの規定で指定されているポート番号で、 メッセージを送受信します。番号については services(5) を参照してください。送受信するメッセージは以下のような形になっています:

    struct  outmp {
    	char    out_line[8];            /* 端末名 */
    	char    out_name[8];            /* ユーザID */
    	long    out_time;               /* 時刻 */
    };
    struct  whod {
    	char    wd_vers;
    	char    wd_type;
    	char    wd_fill[2];
    	int     wd_sendtime;
    	int     wd_recvtime;
    	char    wd_hostname[32];
    	int     wd_loadav[3];
    	int     wd_boottime;
    	struct  whoent {
    		struct  outmp we_utmp;
    		int     we_idle;
    	} wd_we[1024 / sizeof (struct whoent)];
    };

構造体のすべてのフィールドは、送信に先立ってネットワークバイトオーダ (ネットワークバイト順序) に変換されます。ホスト負荷 (load average) は w(1) によって計算され、送信の 5、10、15 分前の負荷が 100 倍された 整数として表現されます。ホスト名 (host name) は、 gethostname(2) システムコールで得られたものがドメイン名を省略して格納されます。 メッセージの最後の配列には、メッセージを送るマシンにログインしてい るユーザの情報が格納されます。この情報は、 アイドルでない端末に関する utmp(5) のエントリと、端末から最後に文字を受け取った時間を秒数で表した値とを 含んでいます。

rwho サーバによって受信されるメッセージは、 rwho サーバのポートから送られたもので、それ以外は捨てられます。さらにメッセージ のなかで指定されているホストの名前が表示できない ASCII 文字を含んでいる場合も、メッセージは捨てられます。 rwhod が受け取った正しいメッセージは /var/rwho ディレクトリに whod.hostname というファイル名で格納されます。これらのファイルは、上で記述したような 形のもののうち、最新のものだけが残っています。

状態メッセージはほぼ3分ごとに作られます。 rwhod は、30 分ごとに /netbsd に対して nlist(3) を実行します。これは、 /netbsd がカーネルの再構築などによって変更されている可能性があるためです。

関連項目
rwho(1), ruptime(1)

バグ
ネットワーク間でステータス情報を中継する方法が必要かもしれません。 ステータス情報は、現在はずっと送りつづけられていますが、要求があったとき にだけ送るようにするべきでしょう。(rwho)サーバが死んでいたり、ネットワーク で通信が失敗したりしているのを見て、マシンがダウンしていると解釈してしまう 場合があります。