次に、SunOS の日次アカウンティング機能がどのように動作するかを要約して示します。
システムをマルチユーザーモードに切り替えると、/usr/lib/acct/startup プログラムが実行されます。この startup プログラムは、それぞれアカウンティング機能を呼び出す他のプログラムを実行します。
acctwtmp プログラムは /var/adm/wtmpx に「ブート」レコードを追加します。このレコードには、システム名が wtmpx レコード内のログイン名として示されます。表 32-1 に、raw アカウンティングデータがどのように収集され、どこに格納されるかをまとめて示します。
表 32-1 raw アカウンティングデータ
/var/adm 内のファイル |
情報 |
ファイルを書くプログラム |
書式定義ヘッダ |
---|---|---|---|
login, init |
utmpx.h |
||
|
date |
|
|
|
acctwtmp |
|
|
|
shutacct シェル |
|
|
プロセス数 |
カーネル (プロセス終了時) |
acct.h |
|
|
|
|
|
特別料金 |
chargefee |
acct.h |
|
使用ディスク領域 |
dodisk |
tacct.h |
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 による切り替えが実行されます。(このプログラムは今までの pacct ファイルを他に移して新しいファイルを作成します。) 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 回実行され、runacct が収集した日次アカウンティング情報 (ASCII 形式) を /var/adm/acct/sum/rprt.MMDD に書き込みます。
monacct プログラムが月に 1 回 (または毎会計期の終わりなど、ユーザーが決めた周期で) 実行されます。monacct プログラムは、sum ディレクトリに格納されているデータに基づいてレポートを作成します。これらのデータは runacct によって毎日更新されています。このレポートを作成後、monacct は sum ディレクトリを「整理」して、新しい runacct データを格納するためのファイルを準備します。
shutdown を使用してシステムをシャットダウンした場合は、shutacct プログラムが自動的に実行されます。shutacct プログラムは /var/adm/wtmpx に理由レコードを書き、アカウンティングプロセスを無効に設定します。