主となる日次アカウンティングスクリプトである runacct は、通常はプライムタイムつまり最も忙しい時間帯を避けて cron コマンドにより起動されます。 この runacct スクリプトは、接続、料金、ディスク、プロセス用の各アカウンティングファイルを処理します。 さらに、このスクリプトは、課金目的で prdaily と monacct スクリプトが使用する日次および累積要約ファイルも準備します。
runacct スクリプトは、エラーが発生した場合、ファイルを壊さないよう注意します。 一連の保護機構により、エラーを認識し、インテリジェント診断を提供し、最小のユーザー介入で runacct スクリプトを起動し直せるように処理を完了しようとします。 runacct は、説明メッセージを active というファイルに書き込み、進捗状況を記録します。 runacct スクリプトが使用するファイルは、特記しない限り、/var/adm/acct/nite ディレクトリにあります。 runacct スクリプト実行中の診断内容の出力は、fd2log ファイルに書き込まれます。
runacct スクリプトが実行されると、lock および lock1 ファイルが作成されます。 これらのファイルは、runacct が同時に実行されるのを防ぎます。 runacct プログラムは、起動時にこれらのファイルが存在すれば、エラーメッセージを出力します。 lastdate ファイルには runacct スクリプトが最後に起動されたときの月日が入っており、このファイルは runacct スクリプトを 1 日に 1 回しか実行できないようにするために使用されます。 runacct スクリプトがエラーを検出した場合は、エラーメッセージがコンソールに出力され、メールが root と adm に送られ、ロックが解除され、診断ファイルが保存され、実行が終了されます。 runacct スクリプトを再び起動する手順については、runacct スクリプトを再起動する方法 を参照してください。
runacct スクリプトを再起動可能にするために、処理は再入可能な別々の状態に分割されます。 statefile というファイルを使用して、最後に終了した状態が追跡されます。 各状態が終了するたびに、statefile は更新されて次の状態に反映されます。 1 つの状態の処理が終了すると、statefile ファイルが読み取られて次の状態が処理されます。 runacct スクリプトは、CLEANUP 状態に達すると、ロックを解除して実行を終了します。 各状態は次の表のように実行されます。
表 20–1 runacct 状態
状態 |
説明 |
---|---|
SETUP |
turnacct switch コマンドが実行されて新しい pacct ファイルが作成される。 /var/adm/pacctn プロセスアカウンティングファイル (pacct ファイルを除く) は、/var/adm/Spacctn.MMDD ファイルに移される。 /var/adm/wtmpx ファイルは /var/adm/acct/nite/wtmp.MMDD ファイルに移動され (現在の時間のレコードは終わりに追加される)、新しい /var/adm/wtmp ファイルが作成される。 closewtmp および utmp2wtmp プログラムは、現在ログインしているユーザーに課金するために wtmp. MMDD ファイルと新しい wtmpx ファイルにレコードを追加する。 |
WTMPFIX |
wtmpfix プログラムが nite ディレクトリ内の wtmp. MMDD ファイルを調べて誤りがないか確認する。 日付の変更により、acctcon プログラムの失敗が引き起こされることがあるため、日付のレコードが変更されると、 wtmpfix プログラムは wtmpx ファイルのタイムスタンプを調整しようとする。 さらに、 wtmpx ファイルからのエントリが壊れていた場合、壊れたエントリをすべて削除する。 修復されたバージョンの wtmp.MMDD ファイルは tmpwtmp ファイルに書き込まれる。 |
CONNECT |
acctcon プログラムが使用されて、ctacct.MMDD ファイルに接続アカウンティングレコードが記録される。 これらのレコードは tacct.h 形式になっている。 acctcon は、さらに lineuse および reboots ファイルを作成する。 reboots ファイルは、wtmpx ファイルで見つかったすべてのブートレコードを記録する |
PROCESS |
acctprc プログラムが使用されて、/var/adm/Spacctn.MMDD プロセス課金ファイルを ptacctn.MMDD ファイルのアカウンティングレコードの合計に変換する。 runacctスクリプトが失敗した場合に、Spacct ファイルが処理されないように、Spacct ファイルと ptacct ファイルは番号で照合される |
MERGE |
acctmerg プログラムが、プロセスアカウンティングレコードを接続アカウンティングレコードとマージして daytacct ファイルを作成する |
FEES |
acctmerg プログラムが、fee ファイルからの ASCII tacct レコードを daytacct ファイルにマージする |
DISK |
dodisk スクリプトの手続きが実行されて disktacct ファイルが作成されている場合は、そのファイルを DISK プログラムは daytacct ファイルにマージし、disktacct ファイルを /tmp/disktacct.MMDD ファイルに移動させる |
MERGETACCT |
acctmerg プログラムが、daytacct を累積合計課金ファイルである sum/tacct ファイルとマージする。 daytacct ファイルは毎日 sum/tacct. MMDD ファイルに保存されるため、sum/tacct ファイルは壊れたり失われたりしても、作成し直すことができる |
CMS |
acctcms プログラムが数回実行される。 まず、このプログラムが実行され、Spacctn ファイルを使用してコマンド要約を生成し、sum/daycms ファイルに日付を書き込む。 次に、acctcms プログラムは、sum/daycms ファイルと sum/cms 累積コマンド要約ファイルをマージする。 最後に、acctcms プログラムは、nite/daycms および nite/cms という ASCII コマンド要約ファイルを、それぞれ sum/daycms および sum/cms ファイルから作成する。 lastlogin プログラムを使用してログファイル /var/adm/acct/sum/loginlog が作成される。これは、各ユーザーが最後にログインした時刻を示すレポートである。 runacct スクリプトが真夜中を過ぎてから実行された場合は、いずれかのユーザーが最後にログインした時刻を示す日付が 1 日分狂うことになる |
USEREXIT |
インストールに依存する任意の (ローカル) 課金プログラムをこの時点で取り入れることができる。 runacct スクリプトは、そのプログラムを /usr/lib/acct/runacct.local プログラムと呼ばれるものと想定する |
CLEANUP |
一時ファイルを整理し、prdaily スクリプトを実行し、その出力を sum/rpt.MMDD ファイルに保存し、ロックを解除し、終了する |
runacct スクリプトを CLEANUP 状態で起動し直すときは、最後の ptacct ファイルが不完全であるため、このファイルを削除してください。