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

runacct スクリプト

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

runacct スクリプトは、エラーが発生した場合、ファイルを壊さないよう注意します。 一連の保護機構により、エラーを認識し、インテリジェント診断を提供し、最小のユーザー介入で runacct スクリプトを起動し直せるように処理を完了しようとします。 runacct は、説明メッセージを active というファイルに書き込み、進捗状況を記録します。 runacct スクリプトが使用するファイルは、特記しない限り、/var/adm/acct/nite ディレクトリにあります。 runacct スクリプト実行中の診断内容の出力は、fd2log ファイルに書き込まれます。

runacct スクリプトが実行されると、lock および lock1 ファイルが作成されます。 これらのファイルは、runacct が同時に実行されるのを防ぎます。 runacct プログラムは、起動時にこれらのファイルが存在すれば、エラーメッセージを出力します。 lastdate ファイルには runacct スクリプトが最後に起動されたときの月日が入っており、このファイルは runacct スクリプトを 1 日に 1 回しか実行できないようにするために使用されます。 runacct スクリプトがエラーを検出した場合は、エラーメッセージがコンソールに出力され、メールが rootadm に送られ、ロックが解除され、診断ファイルが保存され、実行が終了されます。 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 ファイルが不完全であるため、このファイルを削除してください。