日次アカウンティングによって、「接続アカウンティング」、「プロセスアカウンティング」、「ディスクアカウンティング」、「料金計算」の 4 種類のアカウンティングを簡単に実行できます。
接続アカウンティングでは、次のデータを調べることができます。
特定のユーザーがログインしていた時間
tty 回線の利用状況
システムのリブート回数
アカウンティングソフトウェアが有効または無効に設定された頻度
これらの情報を提供するために、システムは期間調整、リブート回数、アカウンティングソフトウェアが有効または無効に設定された回数、実行レベルの変更回数、ユーザープロセス (login プロセスと init プロセス) の作成、プロセスの消滅などの情報のレコードを格納します。これらのレコード (date、init、login、 ttymon、acctwtmp などのシステムプログラムの出力によって生成されます) は /var/adm/wtmpx ファイルに格納されます。wtmpx ファイルのエントリには、ユーザーのログイン名、装置名、プロセス ID、エントリタイプ、エントリがいつ作られたかを示すタイムスタンプなどの情報を含めることができます。
プロセスアカウンティングでは、システムで実行される各プロセスに関する次のようなデータを追跡できます。
プロセスを使用するユーザーおよびグループのそれぞれのユーザー ID とグループ ID
プロセスの開始時刻と経過時間
プロセスの CPU 時間 (ユーザー時間とシステム時間)
使用されるメモリーの量
実行されるコマンド
プロセスを制御する tty
プロセスが終了するたびに、exit プログラムは上記のデータを収集し、/var/adm/pacct ファイルに書き込みます。
ディスクアカウンティングでは、各ユーザーがディスク上にもっているファイルについて次のデータを収集し、それらの書式を指定できます。
ユーザーの名前と ID
ユーザーのファイルが使用しているブロック数
これらのデータはシェルスクリプト /usr/lib/acct/dodisk によって収集されますが、収集周期は /var/spool/cron/crontabs/root ファイルに追加する cron コマンドによって決定されます。dodisk は、acctdusg および diskusg コマンドを起動して、システム内の各ファイルについての情報を収集させます。
dodisk の設定の詳細は、「システムアカウンティングを設定する方法」を参照してください。
acctdusg(1M) コマンドは、すべてのディスクアカウンティング情報を収集します。起動されるたびに、このコマンドは最高 3000 ユーザー分の情報を処理できます。
dodisk(1M) を実行して収集された情報は、/var/adm/acct/nite/disktacct ファイルに格納されます。これらの情報は、次に dodisk を実行したときに上書きされます。したがって、dodisk は同じ日に 2 回以上実行しないでください。
ランダムなアクセスにより書き込まれ、その結果ディスク上で連続していないファイルに対して diskusg コマンドは、より多く課金します。これは、diskusg がファイルのサイズを判定するときにファイルの間接ブロックを読み取らないためです。このコマンドは、i ノードの di_size の値を調べてファイルのサイズを判定します。
chargefee ユーティリティは、ユーザーに提供した特別なサービス (ファイルの復元など) に対する課金を、/var/adm/fee ファイルに格納します。このファイルの各エントリは、ユーザーのログイン名、ユーザー ID、および料金から構成されています。このファイルは、runacct プログラムによって毎日チェックされて、新しいエントリが全体のアカウンティングレコードにマージされます。chargefee を実行してユーザーに課金する命令については、「ユーザーに課金する方法」を参照してください。
次に、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 に理由レコードを書き、アカウンティングプロセスを無効に設定します。