Solaris のシステム管理 (上級編)

runacct スクリプト

主な日次アカウンティングスクリプトである runacct は、通常の業務時間帯を避けて cron コマンドにより起動されます。この runacct スクリプトは、接続、料金、ディスク、プロセス用の各アカウンティングファイルを処理します。さらに、このスクリプトは、課金目的で prdaily スクリプトと monacct スクリプトが使用する、日次および累積の要約ファイルも準備します。

runacct スクリプトは、エラーが発生した場合、ファイルを壊さないよう注意します。

一連の保護機構により、次の作業が実行されます。

このスクリプトは、説明メッセージを active というファイルに書き込み、進捗状況を記録します。runacct スクリプトが使用するファイルは、特記しない限り、/var/adm/acct/nite ディレクトリにあります。 runacct スクリプト実行中の診断内容の出力は、fd2log ファイルに書き込まれます。

runacct スクリプトが実行されると、lock ファイルおよび lock1 ファイルが作成されます。これらのファイルは、runacct スクリプトが同時に実行されるのを防ぎます。runacct プログラムは、起動時にこれらのファイルが存在すれば、エラーメッセージを出力します。lastdate ファイルには runacct スクリプトが最後に起動されたときの月日が入っています。このファイルは runacct スクリプトを 1 日に 1 回しか実行できないようにするために使用されます。

runacct スクリプトがエラーを検出すると、以下が実行されます。

runacct スクリプトを再起動する手順については、runacct スクリプトを再起動する方法」を参照してください。

runacct スクリプトを再起動可能にするために、処理は再入可能な別々の状態に分割されます。statefile というファイルを使用して、最後に終了した状態が追跡されます。各状態が終了するたびに、statefile は更新されて次の状態が反映されます。その状態の処理が終了すると、statefile ファイルが読み取られて次の状態が処理されます。runacct スクリプトは、CLEANUP 状態に達すると、ロックを解除して実行を終了します。各状態は次の表のように実行されます。

表 10–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 ファイルを作成する。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 ファイルは不完全になるため削除してください。