次に、SunOS の日次アカウンティング機能がどのように動作するかを要約して示します。
システムをマルチユーザーモードに切り替えると、/usr/lib/acct/startup プログラムが実行されます。この startup プログラムは、それぞれ日次アカウンティング機能を呼び出す他のプログラムを実行します。
acctwtmp プログラムは /var/adm/wtmpx ファイルに「ブート」レコードを追加します。このレコードには、システム名が wtmpx レコード内のユーザー名として示されます。次の表に、raw アカウンティングデータがどのように収集され、どこに格納されるかをまとめて示します。
表 19–1 raw アカウンティングデータ
/var/adm 内のファイル |
格納される情報 |
データを書き込むプログラム |
表記形式 |
---|---|---|---|
接続セッション数 |
login, init |
バイナリ |
|
|
date |
|
|
|
acctwtmp |
|
|
|
shutacct |
|
|
プロセス |
カーネル (プロセス終了時) |
バイナリ |
|
|
|
|
|
特別料金 |
chargefee |
ASCII |
|
使用ディスク領域 |
dodisk |
バイナリ |
turnacct スクリプトが -on オプションで起動されて、プロセスアカウンティングを開始します。turnacct スクリプトは、特に /var/adm/pacct 引数を使用して accton プログラムを実行します。
remove シェルスクリプトが、runacct によって sum ディレクトリに保存されている pacct および wtmpx ファイルを「整理」します。
login および init プログラムが、/var/adm/wtmpx ファイルにレコードを書き込み、接続セッションを記録します。すべての日付変更 (引数を指定して date を使用) も /var/adm/wtmpx ファイルに書き込まれます。リブート回数とシャットダウン回数も、acctwtmp コマンドを使用して、 /var/adm/wtmpx ファイルに記録されます。
プロセスが終了すると、カーネルが /var/adm/pacct ファイルにプロセスごとに 1 レコードを acct.h 形式で書き込みます。
cron コマンドは、1 時間ごとに ckpacct スクリプトを実行して、/var/adm/pacct ファイルのサイズをチェックします。このファイルが 500 ブロック (デフォルト) よりも大きくなった場合は、turnacct switch コマンドが実行されます。(このプログラムは pacct ファイルを pacctn ファイルに移動して、新しいファイルを作成します。) pacct ファイルを小さく分けることの利点は、それらのレコードを処理するときに障害が発生して、 runacct スクリプトを再起動しようとしたときに明らかになります。
runacct スクリプトは、 cron コマンドによって毎晩実行されます。 runacct スクリプトは、/var/adm/pacctn、/var/adm/wtmpx、/var/adm/fee および /var/adm/acct/nite/disktacct のアカウンティングファイルを処理し、ユーザー別のコマンド要約と利用状況要約を生成します。
/usr/lib/acct/prdaily スクリプトは、runacct スクリプトによって 1 日 1 回実行され、/var/adm/acct/sum/rprt MMDD ファイルに日次アカウンティング情報を書き込みます。
monacct スクリプトが月に 1 回 (または毎会計期の終わりなど、ユーザーが決めた周期で) 実行されます。monacct スクリプトは、sum ディレクトリに格納されているデータに基づいてレポートを作成します。これらのデータは runacct スクリプトによって毎日更新されています。このレポートを作成後、monacct スクリプトは sum ディレクトリを「整理」して、新しい runacct データを格納するためのファイルを準備します。
shutdown コマンドを使用してシステムをシャットダウンした場合は、shutacct スクリプトが自動的に実行されます。shutacct スクリプトは /var/adm/wtmpx ファイルに理由レコードを書き、アカウンティングプロセスを無効に設定します。