この節では、壊れたアカウンティングファイルを修復し、runacct スクリプトを再起動する方法を説明します。
アカウンティングシステムは絶対に障害を発生しないというものではありません。ファイルが壊れたり、失われることがあります。ファイルによっては、単に無視してよいものや、バックアップから復元できるものがあります。ただし、特定のファイルは、アカウンティングシステムの完全性を維持するために修復しなければなりません。
wtmpx ファイルは、アカウンティングシステムを日常的に運用する上で発生する問題の大部分の原因になっています。日付を手動で変更した時に、システムがマルチユーザーモードの場合は、日付変更レコードが/var/adm/wtmpx ファイルに書き込まれます。wtmpfix ユーティリティは、日付変更が行われたときに、wtmp レコードのタイムスタンプを調整するように設計されています。ただし、日付変更とリブートの組み合わせによっては、wtmpfix の処理から漏れて、acctcon プログラムの処理が失敗することがあります。
スーパーユーザーになります。
/var/adm ディレクトリに移動します。
wtmpx ファイルの形式をバイナリから ASCII に変換します。
# /usr/lib/acct/fwtmp < wtmpx > wtmpx.ascii |
wtmpx.ascii を編集して、壊れたレコードを削除します。
wtmpx.ascii ファイルを再びバイナリファイルに変換します。
# /usr/lib/acct/fwtmp -ic < wtmpx.ascii> wtmpx |
詳細は、fwtmp(1M) のマニュアルページを参照してください。
/var/adm/acct/sum/tacct ファイルの完全性は、システム資源に対してユーザーに課金している場合は重要です。不正な tacct レコードが、負の数値、重複ユーザー ID、65535 のユーザー ID で表示されることがあります。このような場合はまず、prtacct スクリプトを使用して/var/adm/acct/sum/tacctprevファイルを印刷してチェックします。内容が正しい場合は、最新の /var/adm/acct/sum/tacctMMDD ファイルを使用して、/var/adm/acct/sum/tacct ファイルを作成し直してください。次の手順は、簡単な修復手順の概要を説明しています。
スーパーユーザーになります。
ディレクトリ /var/adm/acct/sum に移動します。
tacctMMDD ファイルの形式をバイナリから ASCII に変換します。
# /usr/lib/acct/acctmerg -v < tacctMMDD > xtacct |
MMDD は、月と日をあらわす 2 桁の数値を組み合わせたものです。
xtacct ファイルを編集して、壊れたレコードを削除し、重複レコードを別のファイルに書き込みます。
xtacct ファイルを ASCII 形式からバイナリに変換します。
# /usr/lib/acct/acctmerg -i < xtacct > tacctMMDD |
MMDD は、月と日をあらわす 2 桁の数値を組み合わせたものです。
ファイル tacctprev と tacctMMDD をマージしてファイル tacct を生成します。
# /usr/lib/acct/acctmerg < tacctprev tacctMMDD > tacct |
runacct スクリプトは、さまざまな理由で失敗することがあります。最も一般的な理由には、システムクラッシュ、/var ディレクトリの容量不足での実行、wtmpx ファイルが壊れたなどがあります。activeMMDD ファイルが存在する場合は、まずエラーメッセージをチェックします。active ファイルおよび lock ファイルが存在する場合は、異常なメッセージがないかどうか fd2log ファイルを調べます。
runacct スクリプトは、引数を指定しないで実行すると、その実行がその日の最初の実行であるとみなします。runacct スクリプトを再起動し、runacct スクリプトがアカウントを返す月と日を指定する場合は、引数 MMDD が必要になります。処理のエントリポイントは statefile ファイルの内容に基づきます。statefile ファイルを無効にするには、処理を開始したい状態をコマンド行に指定します。利用可能な状態の説明については、runacct(1M) のマニュアルページを参照してください。
runacct プログラムを手動で実行するときは、ユーザー adm として実行していることを確認してください。