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 ファイルが不完全であるため、このファイルを削除してください。