10    システム課金サービスの管理

この章では,システム課金サービスを設定および使用する方法を説明します。 この章の内容は,次のとおりです。

10.1    課金機能の概要

システム課金サービスは,課金データベースを操作し,システム・リソースの使用量およびユーザ・アクティビティの診断ヒストリの情報を取得して,レポート・ファイルを作成するために使用するシェル・スクリプトおよびコマンドです。

情報を定期的に自動収集するように,課金機能を設定することができます。 また,課金シェル・スクリプトと課金コマンドを手動で実行して,必要に応じて課金情報を得ることもできます。

課金サービスで取得できる課金情報は次のとおりです。

課金機能が使用可能になると,カーネルおよび他のシステム・プロセスは,すべての課金情報のソースである課金情報データベース・ファイルに,レコードを書き込みます。

課金情報データベース・ファイルは /var/adm ディレクトリにあり,次のファイルが含まれています。

ファイル 説明
wtmp ログイン/ログアウト・ヒストリ・ファイル
utmp アクティブ接続セッション・ファイル
pacct アクティブ・プロセス課金ファイル
dtmp ディスク使用量ファイル

課金スクリプトおよび課金コマンドは,課金情報データベース・ファイル内のレコードにアクセスし,保管,診断解析,リソース使用料請求などの目的にレコードを使用できるように,再フォーマットします。

いくつかの課金シェル・スクリプトおよび課金コマンドを使用して,次の処理を行うことができます。

スクリプトおよびコマンド出力を,ファイル,または他のスクリプトおよびコマンドにリダイレクトしたり,引き渡すことができます。

システム課金機能では,就業時間と非就業時間を区別することができます。 非就業時間中のシステム使用率は,就業時間中のシステム使用率よりも低いと考えることができます。 非就業時間の指定は,データベース・ファイル /usr/sbin/acct/holidays に行います。 通常,自動課金機能を使用可能にすると,課金機能は非就業時間中に実行されます。

startup シェル・スクリプトによって (課金機能がオンの場合) あるいは,通常,毎日実行される runacct スクリプトによって /var/adm/pacct ファイルが作成されると課金情報の取得が開始されます。

コマンド出力では,日付情報と時刻情報の順序が各利用者によって異なります。 日付指定と時刻指定の順序は,環境変数 NLTIME の設定によって変更できます。

10.1.1    課金シェル・スクリプトと課金コマンド

Tru64 UNIX オペレーティング・システムでは,14 の課金シェル・スクリプトと 20 の課金コマンドが用意されています。 いくつかのシェル・スクリプトはその中で,課金コマンドや他のシェル・スクリプトを実行します。 課金コマンドと課金シェル・スクリプトは,レコードを作成し,課金情報データベース・ファイルに書き込みます。 表 10-1 に,提供される課金コマンドおよび課金シェル・スクリプトを示します。

表 10-1:  課金コマンドおよび課金シェル・スクリプト

名前 タイプ 機能
ac コマンド 接続セッション・レコードを表示する。
acctcms コマンド バイナリ・コマンドの使用方法の要約ファイルをフォーマットする。
acctcom コマンド 省略時の pacct データベース・ファイルまたは指定されたファイルのプロセス課金レコードの要約を表示する。
acctcon1 コマンド wtmp ファイル内のレコードを ASCII フォーマットで要約する。
acctcon2 コマンド acctcon1 コマンドによってフォーマットされたファイルの内容を要約する。
acctdisk コマンド 包括的なディスク使用量課金機能を実行する。
acctdusg コマンド ディスク・ブロック使用量の課金機能を実行する。
acctmerg コマンド 課金レコード・ファイルをマージする。
accton コマンド プロセス課金をオンにする。
acctprc1 コマンド ユーザ識別番号とログイン名で,acct タイプの構造体のレコードを表示する。
acctprc2 コマンド ユーザ識別番号とフルネームで,acct タイプの構造体のレコードを表示する。
acctwtmp コマンド レコードを /var/adm/wtmp ファイルに書き込む。
chargefee スクリプト レコードをデータベース・ファイル /fee に書き込む。
ckpacct スクリプト アクティブ・バイナリ・プロセス課金ファイル /var/adm/acct/pacct のサイズを検査して,ファイルが大きくなりすぎないようにする。
diskusg コマンド ユーザ ID 番号に従ってディスク課金機能を実行する。
dodisk スクリプト 毎日のディスク使用量課金レコードをディスク使用量課金データベース・ファイル /var/adm/nite/dacct に書き込む。
fwtmp コマンド バイナリ・ファイル /var/adm/wtmp のレコードを ASCII フォーマットで表示して,ユーザがエラーを修正できるようにする。
last コマンド ログイン情報を表示する。
lastcomm コマンド 実行されたコマンドに関する情報を表示する。
lastlogin スクリプト すべてのユーザの最終ログイン日付を /var/adm/acct/sum/loginlog ファイルに書き込む。
monacct スクリプト 課金レポート・ファイルの毎月の要約を作成する。
nulladm スクリプト adm ユーザおよびグループによって所有され,保護コードが 664 のファイルを作成する。
pac コマンド プリンタ課金レコードを表示する。
prctmp スクリプト 接続セッション・レコード・ファイル /var/adm/acct/nite/ctmp を表示する。
prdaily スクリプト さまざまなファイルから日次課金レコードを収集し,表示する。
printpw コマンド /etc/passwd ファイルの内容を表示する。
prtacct スクリプト 日次課金ファイル tacct を ASCII 形式でフォーマットして表示する。
remove スクリプト

ファイル /var/adm/acct/sum/wtmp*
/var/adm/acct/sum/acct/pacct*
および /var/adm/acct/nite/lock* を削除する。

runacct スクリプト 日次課金プロセスを実行する。 このコマンドは,さまざまな課金コマンドおよびシェル・スクリプトを定期的に実行して,さまざまな課金ファイルに情報を書き込みます。
sa コマンド 課金レコードの一覧を表示する。
shutacct スクリプト 課金機能をオフにする。
startup スクリプト 課金機能プロセスを開始する。
turnacct スクリプト プロセス課金ファイルの作成を制御する。
wtmpfix コマンド /var/adm/wtmp ファイルの日付およびタイム・スタンプの矛盾を訂正する。

10.1.2    課金ファイル

多数のバイナリ・ファイルおよび ASCII 形式のファイルが,カーネル,または課金コマンドおよび課金シェル・スクリプトによって,作成および保守されます。

課金ファイル,特に,バイナリ形式のファイルは大きくなりすぎないように注意する必要があります。 課金コマンドおよびシェル・スクリプトによって付随的なファイルがいくつか作成されますが,一般に,これらのファイルは,プロセスが実行されている間だけ存在する一時的なファイルです。 たとえばプロセスが中断した場合など,状況によってはこれらの一時ファイルの 1 つまたは複数が,/var/adm サブディレクトリの 1 つに残る場合があります。 これらのサブディレクトリを定期的に検査して,不要なファイルを削除する必要があります。

課金ファイルは,破壊されたり,失われたりすることもあります。 課金データベース・ファイル /var/adm/wtmp および /var/adm/acct/sum/tacct のように,日次レポートまたは月次レポートを作成するのに使用されるファイルは,データの完全性が保証されなければなりません。 これらのファイルが破壊されたり失われたりした場合,バックアップから復元することができます。 また,fwtmp または wtmpfix コマンドを使用して,/var/adm/wtmp ファイルを修正することもできます。 詳細は,10.4.2 項および10.4.1 項を参照してください。 また,acctmerg コマンドを使用して /var/adm/acct/sum/tacct ファイル内のエラーを修正することができます。 詳細は,10.9.2 項を参照してください。

/var/adm/acct/nite ディレクトリには,runacct スクリプトが毎日繰り返し利用されるファイルが含まれています。 これらのファイルの中には,/var/adm/acct/sum ディレクトリにバイナリ形式のファイルを持っているものがあります。 /var/adm/acct/sum ディレクトリには,runacct シェル・スクリプトによって更新され,また,月次レポートを作成するために monacct シェル・スクリプトによって利用される,累積要約ファイルが含まれています。

表 10-2 に,/var/adm ディレクトリ内のデータベース・ファイルを示します。

表 10-2:  /var/adm ディレクトリ内のデータベース・ファイル

ファイル名 タイプ 説明
dtmp ASCII dodisk シェル・スクリプトによって生成された一時的な出力が含まれる。
fee ASCII chargefee シェル・スクリプトからの出力が含まれる。
pacct バイナリ 有効なプロセス課金データベース・ファイルを指定する。 プロセスが,ユーザ,別のプロセス,またはスクリプト・ファイルによって実行されると,このファイルにプロセス処理情報が書き込まれる。
pacctn バイナリ turnacct switch コマンドによって作成された代替の pacct ファイルを指定する。 システムが多数のユーザを持っていると,pacct データベース・ファイルはすぐに大きくなってしまう。 1 つの pacct ファイルは,最大 500 の 1024 バイト・ブロックからなるディスク・スペースに制限されている。 これらのファイルのサイズは,runacct シェル・スクリプトによって監視される。 新しい pacctn ファイルが作成されるたびに,値 n が 1 ずつ大きくなる。
qacct バイナリ キュー登録 (プリンタ) システム課金レコードが含まれている。 このファイルは,runacct シェル・スクリプトによって使用される。
savacct バイナリ システム・プロセス課金要約レコードを保存するために sa コマンドが使用するファイルを指定する。
Spacctn.mmdd バイナリ mmdd でそれぞれ指定された月日ごとに runacct シェル・スクリプトが作成する pacctn ファイルを指定する。
usracct バイナリ ユーザ・プロセス課金要約レコードを保存するために sa コマンドが使用するファイルを指定する。
utmp バイナリ ユーザが接続セッションを生成するプロセスを実行すると書き込まれる,アクティブな接続セッション課金データベース・ファイルを指定する。
wtmp バイナリ 累積ログイン/ログアウト課金データベース・ファイルを指定する。 ユーザがシステムにログインすると,このファイルに接続時間およびユーザ情報が書き込まれる。

表 10-3 に,/var/adm/acct/nite ディレクトリ内のデータベース・ファイルを示します。

表 10-3:  /var/adm/acct/nite ディレクトリの日次ファイル

ファイル名 タイプ 説明
active ASCII 日次 runacct シェル・スクリプト進捗ファイルを指定する。 runacct シェル・スクリプトが実行されると,このファイルに,その進捗に関する情報が書き込まれる。 このファイルには,エラー・メッセージおよび警告メッセージも書き込まれる。
activemmdd ASCII mmdd でそれぞれ指定される月日の,日次 runacct シェル・スクリプト・エラー・ファイルを指定する。 このファイルは,active ファイルと類似している。
cklock ASCII ckpacct シェル・スクリプトが使用するファイルを指定し,複数の runacct シェル・スクリプトがある時間から 24 時間実行されないようにする。 このファイルは,runacct シェル・スクリプトが終了すると削除される。
cms ASCII 使用中の総合日次コマンド要約ファイルを指定する。 このファイルは,/var/adm/acct/sum/cms ファイルの ASCII バージョンである。 cms ファイルは,runacct シェル・スクリプトによって作成される。 runacct は,acctcms コマンドによって実行されて,/var/adm/acct/sum/cms ファイルのレコードの再書き込みを行う。 monacct シェル・スクリプトで,このファイルを初期化する。
ctacct.mmdd バイナリ mmdd によってそれぞれ指定されている月日の,接続セッション課金レコードから得られる接続課金レコードを,tacct.h フォーマットで指定する。 このファイルは一時ファイルであり,個々の課金期間に daytacct ファイルのレコードが書き込まれた後,削除される。
ctmp ASCII 一時ログイン/ログアウト・レコード・ファイルを指定する。 このファイルには,wtmp ファイルのレコードの再書き込みを行うために runacct シェル・スクリプトによって実行される課金コマンド acctcon1 の出力が含まれている。
daycms ASCII 日次コマンド要約ファイルを指定する。 バイナリ・ファイル /var/adm/acct/sum/daycms の ASCII バージョン。 runacct シェル・スクリプトは,acctcms コマンドを実行してファイルを作成する prdaily シェル・スクリプトを実行する。
daytacct バイナリ 前日の総合課金レコードが tacct.h 形式で含まれている。
dacct バイナリ acctdisk コマンドが dodisk シェル・スクリプトによって呼ばれたときに,毎週の総ディスク使用量課金レコードが書き込まれる。
lastdate ASCII runacct シェル・スクリプトが実行された最後の日を指定する。
lineuse ASCII 端末 (tty) 回線接続時間が書き込まれる。 このファイルは,前回の課金期間中に使用された各端末回線の回線使用統計情報を提供する。
lock ASCII cron デーモンが 24 時間の間に 2 回以上 runacct シェル・スクリプトを実行しないようにするために使用するファイルを指定する。 このファイルは,毎日,runacct シェル・スクリプトが終了すると削除される。
log ASCII runacct スクリプトが acctcon1 コマンドを実行すると作成される診断出力が書き込まれる。
owtmp バイナリ wtmpfix コマンドによる修正後に,日次 wtmp ファイルを指定する。
ptacctn.mmdd バイナリ mmdd でそれぞれ指定される月日ごとの,追加の日次 pacctn ファイルを指定する。 これらのファイルは,日次プロセス課金ファイル pacct が 501 以上のディスク・ブロックを必要とする場合に作成される。
reboots ASCII 前の課金期間中のシステム・リブートのリストを内容として持つ。
statefile バイナリ 最後の runacct シェル・スクリプトの実行状態を指定する。
wtmp.mmdd バイナリ mmdd でそれぞれ指定された月日の,修正された日次ログイン/ログアウト・データベース・ファイルを指定する。 前日中にシステムにログインしたユーザの接続セッション・レコードが,このファイルに書き込まれる。
wtmperror ASCII wtmpfix コマンドの実行中に wtmp ファイルが修正された場合に生成されるエラー・メッセージが記録されている。
wtmperrormmdd ASCII mmdd でそれぞれ指定された月日について,wtmpfix コマンドの実行中に runacct シェル・スクリプトがエラーを検出すると生成されるエラー・メッセージが記録されている。

表 10-4 は,/var/adm/acct/sum ディレクトリ内のデータベース・ファイルを示します。

表 10-4:  /var/adm/acct/sum ディレクトリ内の要約ファイル

ファイル名 タイプ 説明
cms バイナリ 使用中の総合コマンド要約ファイルを指定する。 runacct シェル・スクリプトが実行されると,総合コマンド要約ファイルを得るために,このファイルにレコードが記録されている。
cmsprev バイナリ 前日の/var/adm/acct/sum/cms ファイルを指定する。
daycms バイナリ 前日のコマンド要約ファイルを指定する。 runacct シェル・スクリプトが実行されると,前日の月次コマンド要約レコードがこのファイルに書き込まれる。
loginlog ASCII 個々のユーザ名の,最後の月次のログイン日付のリスト。
rprtmmdd ASCII mmdd でそれぞれ指定された月日の日次課金レポートを指定する。
tacct バイナリ 累積課金ファイルを指定する。 このファイルは,システム使用に関する総合日次課金ファイルである。 このファイルは,runacct シェル・スクリプトによって毎日更新される。
tacctmmdd バイナリ mmdd でそれぞれ指定された日付の課金ファイルを指定する。
tacctprev バイナリ 前日の tacct ファイルを指定する。 このファイルは,前の課金期間のバイナリ・ファイル tacct である。

表 10-5 は,/var/adm/acct/fiscal ディレクトリ内のデータベース・ファイルを示します。

表 10-5:  /var/adm/acct/fiscal ディレクトリ内の月次ファイル

ファイル名 タイプ 説明
cmsmm バイナリ mm で指定された月の,アクティブなコマンド要約ファイルを指定する。
fiscrptmm ASCII mm で指定された月の課金レポートを指定する。
tacctmm バイナリ 累積総合課金ファイルを指定する。 このファイルは,システム使用についての総合課金ファイルである。 このファイルは,monacct シェル・スクリプトによって,毎月 1 回更新される。

10.2    課金機能の設定

課金機能を使用するには,System Accounting Utilities サブセットをインストールしなければなりません。 このサブセットがインストールされているかどうかは,次のコマンドで確認できます。

# setld -i | grep count
OSFACCTxxx   installed  System Accounting Utilities \
(System Administration)
 
 

このサブセットがインストールされていない場合は,setld コマンドを使用して,RIS サーバまたは CD-ROM からインストールします。 サブセットをインストールすると,必要な課金サービスを使用可能にすることができます。

多数のユーザが競合してシステム・リソースを使用するようなシステム環境では,UNIX システム課金機能を使用することによってシステムの使用状況を追跡することができます。 この場合,追跡しようとする情報のタイプおよび量を決定する必要があります。 また,自動課金機能を設定するかどうかも決定する必要があります。 自動課金機能を使用可能にするには,/usr/spool/cron/crontabs ディレクトリ内のファイルに課金機能コマンドおよびシェル・スクリプトを指定します。

ネットワークを形成しているすべてのマシンの課金情報を得る場合は,単一のマシンに課金機能を設定しておきます。 システム課金機能を使用可能にするには,次の手順を実行します。 以降の項で,これらの手順について詳しく説明します。

  1. /etc/rc.config ファイルに課金情報自動取得の設定を行います (10.2.1 項)。

  2. qacct ファイル,pacct ファイル,fee ファイルを確認します (10.2.2 項)。

  3. /usr/sbin/acct/holidays ファイルを編集して,就業時間,非就業時間,および休日を指定します (10.2.3 項)。

  4. 自動課金機能を起動するために,/usr/spool/cron/crontabs ディレクトリ内のファイルを変更して,課金シェル・スクリプトおよびコマンドを実行します (10.2.4 項)。

プリント・ドライバ・ソフトウェアは,別のサーバ,デーモン,およびルーチンを使用しているため,プリンタ課金情報は,リソース課金情報とは別に処理されます。 プリンタ課金機能を設定する方法については,第 8 章を参照してください。 この章では,自動プリンタ課金機能を使用可能にする方法のみを説明します。

10.2.1    rc.config ファイルの編集

課金機能を設定するには,次の 1 行を /etc/rc.config ファイルに追加する必要があります。

ACCOUNTING="YES"
 

次のように,rcmgr コマンドを使用して変数を設定できます。

# rcmgr  set  ACCOUNTING  YES
 

startup コマンドを使用すれば,システムをリブートしなくても課金機能を開始することができます。 詳細は,10.3 節を参照してください。

10.2.2    qacct ファイル,pacct ファイル,および fee ファイルの確認

課金が機能するためには,システム上にキュー登録課金ファイル qacct およびプロセス課金データベース・ファイル pacct が存在しなければなりません。 これらのファイルは,コンテキスト依存のシンボリック・リンク (CDSL) のパス名で,ブランク・ファイルとしてプリインストールされています。 ls -l ディレクトリ表示コマンドを使用すると,リンクは次のパスとして表示されます。

/usr/var/cluster/members/member0/adm/acct/fee
/usr/var/cluster/members/member0/adm/acct/pacct
/usr/var/cluster/members/member0/adm/acct/qacct

オリジナルのファイルがない (または誤って壊してしまった) 場合,これらのファイルを CDSL として再作成しなければなりません。 CDSL の再作成については,第 6 章cdslinvchk(8) および mkcdsl(8) を参照してください。 代わりに,取っておきたい課金データや構成ファイルを保存してから,課金ソフトウェア・サブセットを再インストールする方法もあります。

これらのファイルは adm ユーザおよびグループが所有し,パーミッションが 644 でなければなりません。 必要であれば,chown コマンドおよび chgrp コマンドを使用して,これらの値を設定しなおしてください。

10.2.3    holidays ファイルの編集

/usr/sbin/acct/holidays ファイルは,24 時間単位で,就業時間および非就業時間を指定します。 また,休日を指定することもできます。 休日は非就業時間に含まれます。 就業時間に含まれるのは,月曜日から金曜日までです。 非就業時間中のシステム使用率は,就業時間中のシステム使用率より低いと考えられます。 自動課金機能を使用する場合は,非就業時間中にコマンドが実行されるように設定します。

/usr/sbin/acct/holidays ファイルが存在しない場合は作成する必要があります。 また,このファイルがすでに存在する場合は,取得しようとする課金情報に合わせて編集する必要があります。

NHOLIDAYS 環境変数を指定することによって,休日の上限数を holidays ファイルの中に設定できます。

10.2.4    crontab ファイルの変更

自動課金機能を使用可能にするには,crontab コマンドを使用して,/usr/spool/cron/crontabs ディレクトリ内のファイルを変更する必要があります。 /usr/spool/cron/crontabs ディレクトリ内のファイルには,cron デーモンが特定の特権の下に指定された時間に実行するコマンドが含まれています。 たとえば,/usr/spool/cron/crontabs/root ファイル内のコマンドは,root の特権で実行され,/usr/spool/cron/crontabs/adm ファイル内のコマンドは,adm の権限で実行されます。

次のコマンドとシェル・スクリプトを /usr/spool/cron/crontabs/adm ファイルに記述することができます。

ckpacct

このシェル・スクリプトは,プロセス課金データベース・ファイル pacct のサイズを検査し,大きくなりすぎないようにします。

runacct

このシェル・スクリプトは,他の課金シェル・スクリプトおよびコマンドを含んでおり,日次課金ファイルと月次課金ファイルを作成します。 runacct シェル・スクリプトを変更して,不必要な課金のコマンドを削除することもできます。

monacct

このシェル・スクリプトは,月次要約課金ファイルを作成します。 monacct シェル・スクリプトを変更して,不必要な課金コマンドを削除することもできます。

ac

このコマンドは,接続時間レコードを表示します。 出力先としてファイルを指定することもできます。 このコマンドを runacct シェル・スクリプトに追加することもできます。

pac

このコマンドは,プリンタ課金レコードを表示します。 出力先としてファイルを指定することもできます。 プリンタ課金機能を使用可能にする方法についての詳細は,10.8 節を参照してください。

dodisk シェル・スクリプトは,/usr/spool/cron/crontabs/root ファイルに記述することができます。 dodisk シェル・スクリプトは,ディスク使用量課金レコードを作成します。 このシェル・スクリプトは,非就業時間中に毎週 1 回実行させます。

crontab デーモンに対するコマンドの発行についての詳細は,第 3 章および crontab(1) を参照してください。

次の例は,課金機能コマンドおよびシェル・スクリプトが記述されている /usr/spool/cron/crontabs/adm ファイルの一部を示しています。

0 2 * * 1-6 /usr/sbin/acct/runacct  > /usr/adm/acct/nite/fd2log&
5 * * * * /usr/sbin/acct/ckpacct&
0 4 1 * *  /usr/sbin/acct/monacct&
10 3 * * * /usr/sbin/ac -p > /var/adm/timelog&
40 2 * * * /usr/sbin/pac -s&
 

次の例は,dodisk シェル・スクリプトが記述されている /usr/spool/cron/crontabs/root ファイルの一部を示しています。

0 3 * * 4 /usr/sbin/acct/dodisk  > /var/adm/diskdiag&
 

10.3    課金機能のスタートアップと停止

シェル・スクリプト startup および shutacct は,さまざまな課金機能プロセスを使用可能にあるいは使用不能に設定します。 この 2 つのスクリプトは,ログイン名としてシステム名を使用し,/var/adm/wtmp ファイルにレコードを追加する acctwtmp プログラムを実行します。

startup シェル・スクリプトは,課金機能を初期化します。 構文は次のとおりです。

/usr/sbin/acct/startup

注意

startup スクリプトによって作成される pacct ファイルは,グループ adm とユーザ adm によって所有され,保護コード 664 でなければなりません。 所有権が正しくない場合,accton コマンドは動作せず,次のメッセージが表示されます。

accton: uid/gid not adm
 

shutacct スクリプトは,プロセス課金を無効にし,必ず課金機能が停止してから,システムがシャットダウンするようにします。 shutacct シェル・スクリプトの構文は次のとおりです。

/usr/sbin/acct/shutacct [Reason]

Reason 文字列は,ユーザが定義した,コマンド起動の理由です。 shutacct シェル・スクリプトが実行されると,/var/adm/wtmp ファイル内のシャットダウン・レコードの ut_line フィールドに Reason メッセージが書き込まれます。 次に,turnacct off シェル・スクリプトが実行されて,実行中の課金機能を使用不能にしなければならないことをカーネルに通知します。

10.4    接続セッション課金機能

ユーザがログインまたはログアウトすると,login コマンドおよび init コマンドがバイナリ・データベース・ファイル /var/adm/wtmp にユーザ・ログイン・ヒストリおよびユーザ・ログアウト・ヒストリのレコードを書き込みます。 バイナリ・データベース・ファイル /var/adm/utmp は,使用中の接続セッション・ファイルです。 ハングアップ,login コマンドの終了,ログイン・シェルの終了が発生すると,システムはログアウト・レコードをこのファイルに書き込みます。 したがって,ログアウト数がセッション数よりも多くなることがよくあります。

注意

課金レコードが,オペレーティング・システムのバージョン 4.0A のときに作られたものである場合は, wtmpconvert(8) で,ファイルの変換方法を調べてください。

接続セッション・コマンドは,/var/adm/wtmp ファイルのレコードを有効な接続セッション課金レコードに変換できます。 接続セッション課金情報を得られるのは,/var/adm/wtmp ファイルが存在する場合だけです。

/var/adm/wtmp ファイルのフォーマット付きレコードには,各接続セッションに関して下記の情報が記述されています。

システム接続セッションに関する情報の取得や変更に,次の 2 つのシェル・スクリプトおよび 7 つのコマンドが使用されます。

コマンド 機能
ac システム全体および個々のユーザの接続セッション・レコードを表示する。
acctcon1 接続セッション・レコードを要約して,それらのレコードを ASCII 形式 (各接続セッションに 1 行を使用する) で表示する。
acctcon2 acctcon1 コマンドの出力を使用して,全接続セッションの課金レコード・ファイルを ASCII 形式で作成する。
acctwtmp キーボードからレコードを入力することによって,レコードを wtmp ファイルに書き込めるようにする。
fwtmp ファイル構造 utmp.h を持つファイルのレコードを表示する。
last ログイン情報を表示する。
lastlogin 個々のユーザが最後にログインした日付を示すために,/var/adm/acct/sum/loginlog ファイルを更新する。
prctmp acctcon1 コマンドが作成したセッション・レコード・ファイル (通常は /var/adm/acct/nite/ctmp) の内容を表示する。
wtmpfix 日付変更によって影響を受ける接続セッション・レコード wtmp を修正し,wtmp ファイル内のログイン名フィールドに書き込まれたログイン名を有効にする。

ヘッダ・ファイル /usr/include/utmp.h の構造は,次の接続セッション・ファイル用のレコード形式です。

ヘッダ・ファイル /usr/include/utmp.h は,9 つのフィールドから構成されています。 表 10-6 は,utmp をヘッダ・ファイルのフィールド番号,メンバ名説明および必要に応じて,文字の長さを ASCII 形式で示したものです。

表 10-6:  utmp ASCII 形式によるファイル構成要素

フィールド 要素 説明
1 ut_user ユーザ・ログイン名。 sizeof(ut_user) 文字が入っていなければならない。
2 ut_id inittab ID。 sizeof(ut_id) 文字が入っていなければならない。
3 ut_line レコードのタイプ (たとえばデバイス名) を記述するために使用される情報を保持しているメモリ位置。 sizeof(ut_line) 文字が入っていなければならない。
4 ut_pid プロセス ID 番号。
5 ut_type エントリのタイプ。 いくつかのシンボリック定数値を指定できる。 シンボリック定数は,ヘッダ・ファイル /usr/include/utmp.h に定義される。
6 ut_exit.e_termination プロセス終了状態。
7 ut_exit.e_exit プロセス exit 状態。
8 ut_time 開始時間 (秒単位)。
9 ut_host ホスト名。 sizeof(ut_host) 文字が入っていなければならない。

10.4.1    wtmpfix コマンド

/usr/sbin/acct/wtmpfix コマンドは,utmp.h ヘッダ・ファイル構造体を持つファイルにおける日付とタイム・スタンプの不一致を修正し,そのレコードを表示します。 runacct スクリプトが wtmpfix コマンドを実行します。

システムの起動時,あるいは date コマンドが実行された場合など,/var/adm/wtmp ファイルに日付が入力されるたびに,1 組の日付変更レコードが wtmp ファイルに書き込まれます。 最初の日付変更レコードは,フィールド ut_line および ut_type に指定されている古い日付です。 2 番目の日付変更レコードは,ut_line フィールドおよび ut_type フィールドに指定されている新しい日付です。 wtmpfix コマンドは,これらのレコードを使用して /var/adm/wtmp ファイルにおけるすべての日付および日時のスタンプを同期化し,これらの 1 組のレコードを削除します。 日付変更レコードは,出力ファイルには表示されません。

wtmpfix コマンドは,ユーザ名が英数字,$ (ドル記号),スペースのみで構成されているかなど,ユーザ名フィールド (ut_user) の有効性も検査します。 無効なユーザ名が検出されると,wtmpfix コマンドはログイン名を INVALID に変更して,診断メッセージを表示します。

wtmpfix コマンドの構文は次のとおりです。

/usr/sbin/acct/wtmpfix [filename]...

filename 変数には,入力ファイル名を指定します。 省略時の入力ファイルはバイナリ・ファイル /var/adm/wtmp です。

10.4.2    fwtmp コマンド

fwtmp コマンドを使用することにより,wtmp ファイルを修正することができます。 このコマンドは,utmp.h ヘッダ・ファイル構造体を持つファイルのバイナリ・レコードをフォーマット付き ASCII レコードに変換します。 ASCII バージョンの wtmp ファイルを編集することにより,不良レコードの修復や,通常のファイル保守を行うことができます。 表 10-6 に使用すべき ASCII 構造体を示しています。

システム動作中に日付変更およびリブートが起こると,/var/adm/wtmp ファイルにレコードが書き込まれます。 wtmpfix コマンドは,/var/adm/wtmp ファイルのタイム・スタンプを調整します。 しかし,修正内容によっては wtmpfix コマンドによる検出が不可能になり,acctcon コマンドが異常終了することがあります。 その場合,fwtmp コマンドを使用して,/var/adm/wtmp ファイルを修正します。

fwtmp コマンドの構文は次のとおりです。

/usr/sbin/acct/fwtmp [-ic]

fwtmp ファイルは標準入力を使用しますが,コマンドの出力としてファイルを指定することもできます。

fwtmp コマンドでオプションを指定しないと,バイナリ・レコードは ASCII レコードに変換されます。 このコマンドのオプションについての詳細は fwtmp(8) を参照してください。

ヘッダ・ファイル /usr/include/utmp.h のレコードを手動で入力する場合は,表 10-6 に示されているように,utmp ASCII 構造体メンバが使用する順に,9 つのフィールドのそれぞれにデータを入力しなければなりません。 キーボードから入力するすべてのレコード・フィールド・エントリは,スペースで区切ります。 また,ブランク文字を使用してすべての文字列フィールドを (必要ならば,最大の文字列サイズまで) 指定しなければなりません。 すべての小数値は,空の桁にはゼロ (0) を指定し,必要な数の小数点以下の桁数を持たなければなりません。

次の例は,バイナリ・ファイル /var/adm/wtmp のレコードを ASCII 形式のレコードに変換します。

# /usr/sbin/acct/fwtmp  <  /var/adm/wtmp
 
           system boot  0 20000 0000 652547412 Jan 5 11:10:12 1994
           system boot  0 10062 0123 652547412 Jan 5 11:10:12 1994
bcheck  bl              6 80000 0000 652547413 Jan 5 11:10:13 1994
cat     cr             16 80000 0000 652547414 Jan 5 11:10:14 1994
rc      rc             17 80000 0000 652547485 Jan 5 11:11:25 1994
hoffman co console    147 70000 0001 652547495 Jan 5 11:11:35 1994
hoffman p4 pty/ttyp4 2156 80000 0002 652650095 Jan 6 15:41:35 1994
LOGIN   p4 pty/ttyp4 2140 60000 0000 652649075 Jan 6 15:24:35 1994
LOGIN   p4 pty/ttyp4 2140 80000 0000 652649086 Jan 6 15:24:46 1994
 

/var/adm/wtmp ファイルを修正する手順は次のとおりです。

  1. 作業ディレクトリを /var/adm/acct/nite に変更します。

  2. fwtmp コマンドを使用して,wtmp ファイルの ASCII バージョンを作成します。

    # fwtmp < wtmp.0617 > wtmp_temp
    

  3. 一時ファイルを編集し,不正なレコードを削除します。

  4. fwtmp コマンドを使用して wtmp ファイルを作成し直します。

    # fwtmp -ic < wtmp_temp > wtmp.0617
     
    

10.4.3    acctwtmp コマンド

acctwtmp コマンドを使用することにより,コマンドを起動した理由を示す文字列,現在の時刻,および日付を utmp.h 構造体形式のファイル (通常は /var/adm/wtmp ファイル) に追加することができます。 runacctstartup,および shutacct シェル・スクリプトが acctwtmp コマンドを実行し,runacct スクリプトの実行時期およびシステム課金機能を起動または停止した時期を記録します。

acctwtmp コマンドの構文は次のとおりです。

/usr/sbin/acct/acctwtmp reason

reason 変数は最大の sizeof(ut_line) 文字を持ち," " (引用符) で囲まなければなりません。

10.4.4    ac コマンド

ac コマンドは,表 10-6 に記載されている utmp ファイル構造体を持つファイルの接続セッション・レコードを表示します。 このコマンドを使用して,システム診断や,ユーザへの請求金額の決定ができます。 ac コマンドは,すべてのユーザの接続時間の合計,または指定したユーザの接続時間の合計を表示します。 接続時間は,最も近似の小数点以下第 2 位に丸めた時間で表示されます。

総ユーザ接続セッション・ファイルを自動的に作成するには,ac コマンドを /usr/spool/cron/crontab/adm ファイルに記述するか,または runacct シェル・スクリプトを変更して ac コマンドが含まれるようにします。 自動課金機能の設定についての詳細は,10.2.4 項を参照してください。

ac コマンドの構文は次のとおりです。

/usr/sbin/ac [-d] [-p] [-w filename] [username...]

このコマンドのオプションの詳細は, ac(8) を参照してください。

オプションを省略した場合は,すべてのユーザのシステム接続時間の合計を表示します。 次に例を示します。

# /usr/sbin/ac
 "total 48804.26"
 

次のコマンドは,ユーザ名ごとの合計接続時間を表示します。

# /usr/sbin/ac  -p
buckler     61.44
fujimori   530.94
newsnug    122.38
dara         0.10
root       185.98
buchman    339.33
russell     53.96
hoff       200.43
hermi      157.81
total     1968.02
 

最後の行には,リストされているすべてのユーザの接続時間の合計が表示されます。

10.4.5    acctcon1 コマンド

acctcon1 コマンドは,ヘッダ構造体 utmp.h を持つファイルのバイナリ・セッション・レコードを ASCII 形式に変換します。 個々の接続セッションに対して,1 つのレコードが作成されます。 runacct シェル・スクリプトは,acctcon1 コマンドを使用して,lineuse および reboots ファイルを作成します。 これらのファイルは日次レポート /var/adm/acct/sum/rprtmmdd に含まれます。

acctcon1 コマンドの構文は次のとおりです。

/usr/sbin/acct/acctcon1 [-l file] [ -o file] [-pt]

コマンドへの入力としてファイルを指定する必要があります。 このコマンドのオプションの詳細は, acctcon1(8) を参照してください。

次に示すのは,/var/adm/acct/nite/lineuse ファイルの例です。 このコマンドは,指定されたファイルに ASCII 回線使用量形式でレコードを書き込みます。 この形式は,回線使用量を追跡し,不良回線を識別し,ユーザがログインしたポートの参照指定,および,現在実行中の接続セッションの日付およびタイプ・スタンプをいれるのに役立ちます。

# acctcon1 -l line_file < /var/adm/wtmp | more line_file
TOTAL DURATION IS 57 MINUTES
LINE         MINUTES      PERCENT    # SESS   # ON   # OFF
pty/ttyp4         37           64        3      3       7
console           26           45        2      2       4
pty/ttyp5          7           11        1      1       3
pty/ttyp6          0            0        0      0       2
TOTALS            69            -        6      6      16
 

上の例で,ASCII 回線使用量形式は,次のことを指定します。

最後の欄を 4 番目の欄と比較して,回線が不良であるかどうかを判定することができます。

次は,/var/adm/acct/reboots ファイルの例です。 ASCII オーバオール・レコード形式でファイルにレコードを書き込みます。 ASCII オーバオール・レコード形式では,開始時間,終了時間,再起動の回数,日付変更の回数が指定されます。

# acctcon1 -o overall_file < /var/adm/wtmp | more overall_file
from Thu Jun  13 17:20:12 2002 EDT
to   Fri Jun  14 09:56:42 2002 EDT
2   date changes
2   acctg off
0   run-level S
2   system boot
2   acctg on
1   acctcon1
 

オーバオール・レコード形式には,from および to フィールドが含まれています。 このフィールドには,最後の課金レポートが作成された時間および現在のレポートの時間が指定されます。 これらのフィールドの後には,/var/adm/wtmp ファイルのレコードのリストが続きます。

10.4.6    acctcon2 コマンド

runacct シェル・スクリプトは acctcon2 コマンドを起動し,acctcon1 コマンドによって作成される接続セッション・ファイル /var/adm/acct/nite/ctmp を ASCII 形式からバイナリ形式に変換します。

10.4.7    prctmp シェル・スクリプト

prctmp シェル・スクリプトは,acctcon1 コマンドによって作成される /var/adm/acct/nite/ctmp ファイルなどの,utmp.h ヘッダ・ファイル構造体を持っている接続セッション・データベース・ファイルに欄見出しを書き込みます。 prctmp シェル・スクリプトの構文は次のとおりです。

/usr/sbin/acct/prctmp [filename]

詳細は, prctmp(8) を参照してください。

10.4.8    lastlogin シェル・スクリプト

lastlogin シェル・スクリプトは,ユーザがシステムに最後にログインした日付を /var/adm/acct/sum/loginlog ファイルに書き込みます。 このスクリプトは,printpw コマンドを実行して,/etc/passwd ファイルのログイン名とユーザ識別番号にアクセスします。

CMS 状態において runacct シェル・スクリプトが lastlogin シェル・スクリプトを起動します。 lastlogin シェル・スクリプトを手動で実行して,日次レポート /var/adm/acct/sum/rprtmmdd に含まれている /var/adm/acct/sum/loginlog ファイルを更新することもできます。

lastlogin シェル・スクリプトの構文は次のとおりです。

/usr/sbin/acct/lastlogin

10.4.9    last コマンド

last コマンドは,/var/adm/wtmp ファイル内のすべてのログイン・レコードを入力と逆の順序で表示します。 各ログイン・セッションについて,次の情報が示されます。

状況によっては次の情報も含まれます。

last コマンドの構文は次のとおりです。

/usr/bin/last [-#] [username...] [tty...]

省略時の設定ではすべてのレコードが表示されます。 ユーザ名あるいは端末を指定することもできます。

最近の 3 つの root ログインに関する情報を表示させる場合は,次のように入力します。

# last -3 root
root    ttyp1     shout     Fri Jun 21 10:56   still logged in
root    ttyp1     raven     Fri Jun 21 08:59 - 09:00  (00:00)
root    ttyp0     raven     Thu Jun 20 15:29 - 15:54  (00:24)

10.5    プロセス課金

コマンド,シェル・スクリプト,またはプログラムがシステムで実行されると,プロセス課金が発生します。 プロセスが終了すると,カーネルはプロセス課金レコードをデータベース・ファイル pacct に書き込みます。 プロセス課金レコードによって,プログラムの実行にかかわる統計情報を監視することができます。 プロセスの実行に関する情報は,ps コマンドを使用して取得します。 accton コマンドは /var/adm/pacct ファイルを作成し,プロセス課金をオンにします。

pacct ファイルは常に成長します。 ckpacct コマンドは pacct ファイルのサイズを調べ,pacct ファイルが指定されたサイズよりも大きい場合には,pacctn ファイルを作成します。

データベース・ファイル pacct には,次のようなプロセスに関する情報が含まれています。

プロセス課金ファイルのレコードは tacct 形式であり,ヘッダ・ファイル構造体 acct によって設定されます。 ヘッダ・ファイル構造体 acct はヘッダ・ファイル /usr/include/sys/acct.h に定義され,最高 18 欄の課金情報を含んでいます。 構造体メンバ tacct は,プライベート・ヘッダ・ファイル tacct.h に定義されます。

表 10-7 に,tacct 形式のファイルの欄番号,見出し,および説明を示します。

表 10-7:  tacct ファイル・フォーマット

見出し 説明
1 UID /etc/passwd ファイルから得られるユーザ識別番号。
2 LOGNAME /etc/passwd ファイルから得られるユーザ・ログイン名。
3 PRI_CPU 就業時間内の CPU 実行時間。 これは,就業時間内の CPU 実行時間のうちユーザに課金された合計時間 (秒単位) である。
4 NPRI_CPU 非就業時間内の CPU 実行時間。 これは,非就業時間内の CPU 実行時間のうちユーザに課金された合計時間 (秒単位) である。
5 PRI_MEM 就業時間内のメモリ占有時間。 これは,総 CPU 時間 (分単位) に,使用されたメモリの平均サイズを掛けたものである。
6 NPRI_MEM 非就業時間内のメモリ占有時間。 これは,総 CPU 時間 (分単位) に,メモリの平均サイズを掛けたものである。
7 PRI_RD/WR 就業時間の動作時に転送された合計文字数。
8 NPRI_RD/WR 非就業時間の動作時に転送された合計文字数。
9 PRI_BLKIO 就業時間内の読み取りおよび書き込み動作時に転送された総 I/O ブロック数。 I/O ブロックのバイト数は,実装方法によって異なる。
10 NPRI_BLKIO 非就業時間内の読み取りおよび書き込み動作時に転送された合計 I/O ブロック数。 I/O ブロックのバイト数は,実装方法によって異なる。
11 PRI_CONNECT 接続が行われていた総就業時間数 (秒)。
12 NPRI_CONNECT 接続が行われていた総非就業時間数 (秒)。
13 DSK_BLOCKS 使用された総ディスク・ブロック数。
14 PRINT システムのプリンタにキュー登録された総ページ数。
15 FEES 課金対象のユニット数。 この値は,シェル・スクリプト /usr/sbin/acct/chargefee で指定される。
16 PROCESSES 課金期間中にユーザが生成した総プロセス数。
17 SESS 課金期間中のユーザの総ログイン回数。
18 DSAMPS DSK_BLOCKS 欄に指定されている総ディスク・ブロック数を調べるためにディスク課金コマンドが使用された回数の合計。 DSK_BLOCKS 欄の値を DSAMPS 欄の値で除算することにより,課金期間中に使用された平均ディスク・ブロック数を求めることができる。

プロセス課金のシェル・スクリプトおよびコマンドを使用することによって,コマンド群およびそれらのコマンドを処理するために使用されたリソースに関する情報を統合することができます。 以降の各項では,プロセス課金のシェル・スクリプトおよびコマンドについて説明します。

10.5.1    accton コマンド

accton コマンドは,プロセス課金を開始したり終了したりします。 accton コマンドの構文は次のとおりです。

/usr/sbin/acct/accton [filename]

filename 変数を省略すると,プロセス課金は使用不能になります。 filename 変数を指定すると,プロセス課金が有効になり,カーネルは指定したファイルにプロセス課金レコードを書き込みます。 通常,このファイルには pacct ファイルを指定しますが,別のプロセス課金データベース・ファイルを指定することもできます。 指定するファイルは,/var/adm ディレクトリに存在し,ユーザ adm によって所有され,ログイン・グループ adm のメンバでなければなりません。

注意

シェル・スクリプト runacct および turnacct はプロセス課金データベース・ファイル pacct を使用するため,pacct ファイル以外のプロセス課金データベース・ファイルを指定するとシェル・スクリプト runacct および turnacct が影響を受けます。

10.5.2    turnacct シェル・スクリプト

turnacct シェル・スクリプトは,プロセス課金機能を制御し,プロセス課金ファイルを作成します。 このシェル・スクリプトを使用するには,スーパユーザでなければなりません。 turnacct スクリプトの構文は次のとおりです。

turnacct [ on | off | switch ]

turnacct on シェル・スクリプトは,引数として pacct ファイルを指定して accton シェル・スクリプトを実行し,プロセス課金を使用可能に設定します。

turnacct off シェル・スクリプトは,引数を指定しないで accton コマンドを実行し,プロセス課金を使用不能に設定します。

turnacct switch シェル・スクリプトは,pacct ファイルの内容を pacctn ファイルに移動して,新しい pacct ファイルを作成します。

10.5.3    ckpacct シェル・スクリプト

pacct ファイルは拡張できます。 指定した上限を超えて pacct ファイルが大きくなり,かつディスク・スペースが十分にある場合,ckpacct スクリプトは turnacct switch シェル・スクリプトを実行して pacct ファイルの内容を pacctn ファイルに移動し,新しい pacct ファイルを作成します。

ckpacct スクリプトを定期的に実行するように,cron デーモンを設定することができます。 詳細は,10.2.4 項を参照してください。

ckpacct シェル・スクリプトの構文は次のとおりです。

ckpacct [blocksize]

blocksize 変数には,pacct ファイルの上限サイズをディスク・ブロック単位で指定します。 省略時のサイズは 500 ディスク・ブロックです。

ckpacct シェル・スクリプトを実行すると,/var/adm ディレクトリで使用できるディスク・ブロックの数が報告されます。 使用可能なブロックの数が上限サイズより少ないと,プロセス課金はシェル・スクリプト turnacct off の呼び出しにより使用不能になります。 また,診断メッセージが表示され,そのメッセージが環境変数 MAILCOM で指定されているアドレスに送られます。 環境変数 MAILCOM を下記のコマンドに設定するには,putenv 関数を使用します。

mail root adm
 

次の診断メッセージは,/var/adm ディレクトリに 224 のディスク・ブロックが残っていることを示しています。

ckpacct: /var/adm too low on space  (224 blocks)
  "turning acctg off"
 

ckpacct シェル・スクリプトは,/var/adm ディレクトリに十分なスペースが確保されるまで,診断メッセージを表示し続けます。

10.5.4    acctcom コマンド

acctcom コマンドは,プロセス課金レコードの要約を表示します。 コマンド・オプションを使用すれば,出力のタイプと形式を指定することができます。 acctcom コマンドを使用するには,スーパユーザである必要はありません。

acctcom コマンドは,終了したプロセスに関する情報だけを表示します。 実行中のプロセスについての情報を表示するには,ps コマンドを使用します。 acctcom コマンドの構文は次のとおりです。

/usr/bin/acctcom [option...] [filename...]

filename 変数を省略すると,pacct ファイルを使用してプロセス課金レコードを取得します。 filename 変数を指定することにより,ヘッダ・ファイル acct.h を持つ別のプロセス課金ファイルを指定することができます。 2 つ以上の filename 変数を指定すると,acctcom コマンドは入力順にファイルを読み取ります。

コマンド・オプションを指定しない場合は,省略時の出力として,欄ヘッダ形式の次のような情報が含まれます。

このコマンドのオプションについての詳細は, acctcom(8) を参照してください。

省略時のプロセス課金の要約の出力例は次のとおりです。

# /usr/bin/acctcom  /var/adm/pacct1
ACCOUNTING RECORDS FROM: Mon Jun 17 02:00:00 2002
COMMAND                  START    END        REAL   CPU    MEAN
NAME     USER   TTYNAME  TIME     TIME      (SECS) (SECS) SIZE(K)
#sa      root   ttyp1    11:59:00 11:59:00   0.77   0.01   0.00
ls       root   ttyp1    11:59:04 11:59:04   0.11   0.01   0.00
uugetty  root   ?        11:58:39 11:59:48  69.53   0.01   0.00
#ls      root   ttyp1    11:59:55 11:59:55   0.30   0.01   0.00
uugetty  root   ?        11:59:49 12:00:58  69.48   0.01   0.00
cp       adm    ?        12:05:01 12:05:01   0.33   0.01   0.00
chmod    adm    ?        12:05:01 12:05:01   0.27   0.01   0.00
#df      adm    ?        12:05:02 12:05:02   0.38   0.01   0.00
awk      adm    ?        12:05:02 12:05:02   0.58   0.01   0.00
sed      adm    ?        12:05:02 12:05:02   0.56   0.01   0.00
 

10.5.5    sa コマンド

sa コマンドは,プロセス課金情報を要約します。 このコマンドを使用すれば,大量の課金情報を管理しやすくなります。 sa コマンドで作成されたファイルには,有効なプロセス課金情報がすべて含まれています。 sa コマンドの構文は次のとおりです。

/usr/sbin/sa [options...] [filename]

filename 変数には,acct.h ヘッダ・ファイル構造体を持つプロセス課金ファイルを指定します。 filename 変数を省略すると,pacct ファイルが使用されます。

オプションを指定しないで sa コマンドを実行すると,省略時の出力は,見出しのない 6 つの欄で構成されることになります。 あるコマンド・オプションは,欄が 6 つに増えてより多くの情報を含むことができます。 オプションを指定して,フォーマットを変更したり,識別接尾語を含む補足情報を出力することができます。 このコマンドのオプションの詳細は, sa(8) を参照してください。

次に示すのは,sa コマンドの出力の省略時の形式の例です。

# /usr/sbin/sa
798      277.24re       0.08cpu    3248790avio      0k
  7       33.42re       0.08cpu     103424avio      0k    csh
 14        0.08re       0.00cpu     127703avio      0k    mv
 40        0.34re       0.00cpu     159968avio      0k    cp
  2        0.01re       0.00cpu     132448avio      0k    acctwtmp
 34        0.13re       0.00cpu     133517avio      0k    chmod
 23        0.10re       0.00cpu     139136avio      0k    chgrp
 25        0.11re       0.00cpu     144768avio      0k    chown
 36        0.15re       0.00cpu     133945avio      0k    dspmsg
 32        0.18re       0.00cpu     134206avio      0k    cat
 |         |            |           |               |     [6]
 |         |            |           |               [5]
 |         |            |           [4]
 |         |            [3]
 |         [2]
 [1]
 

  1. コマンドの実行回数

    -c オプションを指定すると,全コマンドの実行回数に占める,そのコマンドの実行回数の比率を示す欄が,さらに追加されます。 [例に戻る]

  2. 実時間の合計

    -c オプションを指定すると,実時間の比率を示す欄が,さらに追加されます。 [例に戻る]

  3. CPU 時間

    オプションを指定することによって,システム CPU 時間とユーザ CPU 時間の合計,ユーザ CPU 時間,システム CPU 時間,あるいはシステム CPU 時間に対するユーザ CPU 時間の比率を,それぞれ欄に表示できます。

    -c オプションを指定すると,実時間の比率を示す欄がさらに追加されます。 また,-t オプションを指定すると,ユーザ CPU 時間とシステム CPU 時間の合計に対する実時間の比率を示す欄が,さらに追加されます。 [例に戻る]

  4. ディスク入出力動作についての情報 (I/O 動作の平均回数または総数) [例に戻る]

  5. メモリ時間全体で使用されたブロック数

    K ブロック単位 (ブロック数に 1024 を積算した値)。 [例に戻る]

  6. コマンド名 [例に戻る]

次の例では,下記のような各比率を表示する 3 つの欄が,省略時の形式に追加されています。

# /usr/sbin/sa -c
645 100.00% 324.10re 100.00% 0.02cpu 100.00% 6171050avio 0k
  2   0.31%  25.70re   7.93% 0.02cpu 100.00%  107392avio 0k csh
  6   0.93%   0.04re   0.01% 0.00cpu   0.00%  132928avio 0k mv
 38   5.89%   0.33re   0.10% 0.00cpu   0.00%  163357avio 0k cp
  2   0.31%   0.01re   0.00% 0.00cpu   0.00%  132992avio 0k cat
 26   4.03%   0.11re   0.03% 0.00cpu   0.00%  136832avio 0k chmod
 24   3.72%   0.10re   0.03% 0.00cpu   0.00%  139824avio 0k chgrp
      |                |               [3]
      |                [2]
      [1]
 

追加の欄では,次の情報を表示します。

  1. 全コマンドの総実行回数に対する各コマンドの実行回数の比率を示す。 [例に戻る]

  2. 欄 1 に指定されている回数だけ,そのコマンドの実行に要した総実時間合計の,全コマンドの実行に要した総実時間に対する比率を示す。 [例に戻る]

  3. 全コマンドの実行に要した総 CPU 時間に対して,欄 1 で指定されている回数だけの当該コマンドの実行に要した総 CPU 時間の比率を示す。 [例に戻る]

10.5.6    acctcms コマンド

acctcms コマンドは,プロセス課金レコードから,ASCII 形式およびバイナリ形式のコマンド要約ファイルを作成します。 pacct ファイルなどの,/usr/include/sys/acct.h ヘッダ・ファイル構造体を持っているプロセス課金ファイルを指定します。 acctcms コマンドは,レコードをソートして,課金期間中に使用された個々のコマンドについての統計情報を 1 つのレコードに統合します。 このレコードから,最も頻繁に使用されたコマンドおよび最も多くのシステム時間を使用したコマンドが分かります。

CMS 状態において runacct シェル・スクリプトが acctcms コマンドを実行します。 このコマンドを手動で実行して,コマンド要約レポートを作成することもできます。

acctcms コマンドの構文は次のとおりです。

/usr/sbin/acct/acctcms [-acjnopst] filename...

オプションを指定しないで acctcms コマンドを実行すると,メモリ占有時間の多い順に出力されます。 メモリ占有時間は,プロセスによって使用されたメモリの K バイト数に,使用されたバッファ時間を積算した値です。 省略時の設定は,バイナリ出力です。 メモリ占有時間は,次の計算によって求められます。

メモリ占有時間 = [(秒単位の CPU 時間) * (平均メモリ・サイズの k バイト数)] / 60
 

このコマンドのオプションの詳細は, acctcms(8) を参照してください。

注意

acctcms コマンドを使用して要約ファイルを ASCII 形式で作成すると,個々のコマンド・レコードは 81 文字以上で構成され,10 文字/インチの固定幅フォントが指定されている場合は全体幅が 8.5×11 インチの用紙を使用することができます。 レコードの一部が欄の幅を超えると,その部分は次の行に移動されます。

次に示すのは,COMMAND NAME 欄で ***other が指定されている行に,1 回しか実行されなかったコマンド群についての統計情報が表示されている ASCII 出力の例です。

# acctcms -a -j /var/adm/pacct1
                        TOTAL COMMAND SUMMARY
COMMAND NUMBER TOTAL  TOTAL  TOTAL   MEAN  MEAN   HOG    CHARS  BLOCKS
NAME    CMDS KCOREMIN CPUMIN REALMIN SIZEK CPUMIN FACTOR TRNSFD READ
 
TOTALS  9377  0.00    0.36  26632.67 0.00  0.00   0.00 17768213 100529
 
chmod     34  0.00    0.00       .15 0.00  0.00   0.07  5785856    64
ln         4  0.00    0.00      0.01 0.00  0.00   0.78   422016    16
xterm      9  0.00    0.03    537.41 0.00  0.00   0.00 22948288   536
getcons    8  0.00    0.00      0.14 0.00  0.00   0.07 26636992   102
cfe2.20    4  0.00    0.00      0.09 0.00  0.00   0.12   182464   155
dump      22  0.00    0.00     14.91 0.00  0.00   0.00 69402112   128
whoami     4  0.00    0.00      0.03 0.00  0.00   0.36  7405952    27
restore   40  0.00    0.00     49.16 0.00  0.00   0.00 34247488  1316
***other  25  0.00    0.00   3546.88 0.00  0.00   0.00 35904984   737
hostname   2  0.00    0.00      0.01 0.00  0.01   0.94   223104    14
 

HOG FACTOR (使用効率) は,総 CPU 時間を実時間合計で除算した値です。

10.5.7    acctprc1 コマンド

acctprc1 コマンドは,/usr/include/sys/acct.h ヘッダ・ファイル構造体を持つファイルからプロセス課金レコードを読み取り,ユーザ識別番号と対応するログイン名を追加し,ASCII 形式でレコードを表示します。 ログイン・セッション・レコードは,ユーザ識別番号およびログイン名に従ってソートされます。

使用しているシステムに,同じユーザ識別番号を持つ複数のユーザが存在する場合は,pacct ファイルではなく,/var/adm/acct/nite ディレクトリ内のプロセス課金ファイルを使用しなければなりません。

PROCESS 状態において runacct シェル・スクリプトが acctprc1 コマンドを実行します。 また,このコマンドは手動で実行することもできます。 acctprc1 コマンドの構文は次のとおりです。

/usr/sbin/acct/acctprc1 [filename]

filename 変数には,/usr/include/utmp.h ヘッダ・ファイル構造体で定義された形式でログイン・セッションのリストが入っているファイルを指定します。 filename 変数を省略すると,ログイン名は /etc/passwd ファイルから得られます。

このコマンドの出力は,見出しのない次の 7 つの欄を持つ形式で情報を指定します。

次に示すのは,acctprc1 コマンドとその出力例です。

# /usr/sbin/acct/acctprc1  < /usr/adm/pacct
   0   root      0     1   17228   172    6
   4   adm       0     6   46782    46   16
   0   root      0    22  123941   132   28
9261   hoffmann  6     0   17223    22   20
   9   lp        2     0   20345    27   11
9261   hoffmann  0   554   16554    20  234
 

10.5.8    acctprc2 コマンド

acctprc2 コマンドは,acctprc1 コマンドが作成したレコードを読み取り,ユーザ識別番号とログイン名に従ってそれらのレコードを要約し,ソートされた要約結果を総合課金バイナリ・レコードとして tacct ファイル・フォーマットで表示します。 acctprc2 コマンドによって作成されたバイナリ・ファイルは,acctmerg コマンドを使用して日次要約課金レコード・ファイルを作成することにより,他の総合課金ファイルとマージすることができます。

PROCESS 状態において runacct シェル・スクリプトが acctprc2 コマンドを実行します。 このコマンドは手動でも実行することができます。

10.5.9    lastcomm コマンド

lastcomm コマンドは,pacct ファイルにあるコマンド実行情報を,時間の新しい順に表示します。

各プロセスについて,次の情報が表示されます。

lastcomm コマンドの構文は次のとおりです。

/usr/bin/lastcomm [command] [username] [tty]

次の例は,root によって実行された sed コマンドに関する情報を示したものです。

# lastcomm sed root
sed      S  root     ttyp0      0.01 secs Fri Jan 21 11:34
sed      S  root     ttyp0      0.01 secs Fri Jan 21 11:34
 

10.6    ディスク使用量課金機能

ディスク使用量課金機能は,シェル・スクリプト dodisk によって実行されます。 dodisk シェル・スクリプトは,diskusg コマンドまたは acctdusg コマンドを使用して,中間 ASCII ファイル /var/adm/dtmp に情報を書き込みます。 dodisk スクリプトは,中間ファイルを acctdisk コマンドの入力として使用してバイナリ総合課金データベース・ファイル /var/adm/acct/nite/dacct を作成します。 dodisk スクリプトは,すべてのファイル・システムあるいはファイル・システム・データベース・ファイル /etc/fstab で指定されているファイル・システムでディスク課金機能を実行します。

/var/adm/acct/nite/dacct ファイルに他の課金情報を組み込むことにより,完全な課金レポートを作成することができます。 次に例を示します。

# /usr/sbin/acct/dodisk
# /usr/sbin/acct/prtacct /var/adm/acct/nite/dacct
 

10.6.1    dodisk シェル・スクリプト

ディスク使用量課金情報を取得するには,dodisk シェル・スクリプトを使用します。 dodisk スクリプトは,自動的に実行されるように cron デーモンに対して設定することも,手動で実行することもできます。 dodisk シェル・スクリプトの構文は次のとおりです。

/usr/sbin/acct/dodisk [-o] [filesystem...]

/usr/sbin/acct/dodisk [device special file...]

-o オプションを使用することにより,UFS ファイル・システムあるいは AdvFS ファイルセットのマウント・ポイントに対してディスク使用量課金機能を実行できるように filesystem 変数を指定することができます。 -o オプションを指定しない場合は,次の例のように,この変数には raw デバイス特殊ファイルあるいはキャラクタ・デバイス特殊ファイルを指定する必要があります。

# /usr/sbin/acct/dodisk /dev/rdisk/dsk3c
 

引数の指定を省略すると,ディスク課金機能はデータベース・ファイル /etc/fstab に記述されている UFS デバイス特殊ファイルに対して実行されます。 詳細については, fstab(4) を参照してください。

注意

スワップ領域が /etc/fstab ファイルに指定されていると,dodisk シェル・スクリプトは正しく実行されません。 この場合,特定のファイル・システムだけを使用するように dodisk シェル・スクリプトを編集するか,dodisk シェル・スクリプトを実行して課金情報が必要なファイル・システムを指定します。

-o オプションを指定すると,シェル・スクリプト dodisk は,diskusg コマンドではなく acctdusg コマンドを使用して,より完全であるが低速なバージョンのディスク課金機能を実行します。 -o オプションを指定して filesystem 変数を指定する場合は,デバイス特殊ファイル名ではなくマウント・ポイントを指定します。

10.6.2    diskusg コマンド

diskusg コマンドは,ディスク課金レコードを表示します。 diskusg コマンドは,/etc/passwd ファイルからユーザ・ログイン名と識別番号を取得します。 diskusg コマンドの構文は次のとおりです。

/usr/sbin/acct/diskusg [-options] [filesystems]

このコマンドのオプションの詳細は, diskusg(8) を参照してください。

diskusg コマンドは,ASCII 形式ファイル /var/adm/dtmp を出力として生成します。 このファイルは,ASCII 形式レコードをバイナリ形式の総合課金レコードに変換し /var/adm/acct/nite/dacct ファイルを生成する acctdisk コマンドの入力として使用されます。 これらのレコードを他の課金レコードとマージすることにより日次総合課金レポートが作成されます。

diskusg コマンドによって作成される各出力レコードには,ユーザ識別番号,ログイン名,およびユーザに割り当てられたディスク・ブロックの総数が含まれます。 diskusg コマンドはユーザ i ノード・レコードを検査するため,空のディレクトリを含め,すべてのディスク・スペースが課金の対象となります。

次に示すのは diskusg コマンドの実行例です。

# /usr/sbin/acct/diskusg  /dev/rdisk/dsk3c
   0   root        63652
   1   daemon         84
   2   bin         71144
   4   adm           976
   5   uucp         3324
 322   homer           2
 521   whistler        2
 943   cellini       363
1016   pollock        92
1098   hopper        317
 

ファイル・システムに対して raw デバイス特殊ファイルを指定する必要があります (たとえば /dev/rdisk/dsk3c)。 ファイル・システムはターゲット・デバイス上になければなりません。

10.6.3    acctdusg コマンド

acctdusg コマンドは,diskusg コマンドよりも完全なディスク課金情報を取得します。 dodisk シェル・スクリプトを -o オプション付きで実行すると,acctdusg コマンドが呼び出されて /var/adm/dtmp ファイルが作成されます。

acctdusg コマンドの構文は次のとおりです。

acctdusg [-u filename] [-p filename]

このコマンドのオプションの詳細は, acctdusg(8) を参照してください。

このコマンドの出力ファイルにはディスク使用量バイナリ・ファイル (通常は /var/adm/dtmp) を使用します。 acctdusg コマンドは,dodisk シェル・スクリプトによって実行されると,dodisk スクリプトで指定されたファイル・システムを入力として使用します。

acctdusg コマンドへの入力は,通常,find / -print コマンドから引き渡されたファイルのリストです。 このコマンドは,ファイル・パス名とユーザのログイン・ディレクトリ ($HOME) を比較します。 ファイル・パス名がユーザのログイン・ディレクトリと同じであれば,当該ユーザはそのファイルについて課金されます。 したがって,ファイルが置かれているディレクトリは,ディスク・スペースに対してユーザに課金する際の決定要素となります。 ログイン・ディレクトリ以外のディレクトリに存在するファイルが使用したディスク・ブロック数は,-u オプションを使用して表示することができます。

acctdusg コマンドは,各ファイルごとに,ファイルに割り当てられたディスク・ブロック (隠しブロックや間接ブロックを含む) の数をハード・リンクの数で除算した値を計算します。 2 人以上のユーザが同じファイルとのリンクを持っている場合は,acctdusg コマンドは,当該ファイルの総ディスク・スペースの料金をユーザ数で割った値で各ユーザに課金します。

acctdusg コマンドの出力は,ユーザ識別番号,ユーザ名,およびユーザが所有しているすべてのファイルの計算値の合計を,3 つの欄に表示し,ユーザ識別番号の前に 0 (ゼロ)を付けます。 acctdusg コマンドは,空のディレクトリのディスク・ブロック数は表示しません。

10.6.4    acctdisk コマンド

acctdisk コマンドは,バイナリ形式の総合課金ファイルを作成します。 acctdisk コマンドが dodisk スクリプトから実行されると,diskusg コマンドまたは acctdusg コマンドで作成された /var/adm/dtmp ファイルを読み取り,変換されたバイナリ・レコードを一時ファイルに書き込みます。 この一時ファイルは,その後,/var/adm/acct/nite/dacct ファイルに改名されます。

通常,acctdisk コマンドで作成されたディスク使用量課金レコードは他の課金レコードとマージされて,総合課金レポートが作成されます。

10.7    システム管理サービス課金機能

スーパユーザは,システム管理の各サービス料をユーザに請求することができます。 たとえば,次のサービスに対して課金することができます。

chargefee シェル・スクリプトを使用すれば,ユーザへのサービスに対して課金することができます。 この場合,各サービスの課金額を決定する必要があります。 また,サービスの実行に要した時間に応じて異なる課金率を設定することができます。

課金単位は,fee ファイルに収集されます。 各ユーザ名に対する課金単位数によって,システム管理作業の料金を決定します。 chargefee シェル・スクリプトは,必要に応じて fee ファイルを作成し,ユーザ識別番号,ユーザ名,および課金単位で構成されるレコードを書き込みます。

chargefee シェル・スクリプトの構文は次のとおりです。

/usr/sbin/acct/chargefee user_name units

units 変数にダッシュ (-) を指定することによって課金単位を減算することができます。

次の例では,7 課金単位を josh というユーザに請求しています。

# chargefee josh 7
 

上記のコマンドが発行されると,次のレコードが /fee ファイルに書き込まれます。

1114 josh 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0
 

10.8    プリンタ課金機能

課金機能が使用可能になっているプリンタを使用すると,プリンタ課金ファイルにレコードが書き込まれます。 プリンタ課金レコードは,固有の形式を持っており,次の情報が含まれています。

プリンタ課金レコードによって,スーパユーザは,システム・プリント・リソースを使用したユーザに課金し,プリンタ使用状況を追跡することができます。

2 つのプリンタ課金ファイルが,ディレクトリ /var/adm または /var/adm/printer に置かれます。 プリンタ・ユーザ・ファイル printer.acct は,マシンおよびユーザごとに,使用したプリント用紙の量と費用をリストします。 プリンタ要約ファイル printer.acct_sum は,マシンおよびユーザごとに,使用された用紙についての要約をリストします。 printer 変数には,プリンタ名を指定します。 プリンタ課金ファイルの作成に関しては,第 8 章を参照してください。

プリンタ使用量に関するレポートの作成には pac コマンドを使用します。 ただし,pac コマンドは,課金機能が使用可能になっているプリンタに関する情報のみを取得します。 pac コマンドの構文は次のとおりです。

pac [-cmrs] [-pprice] [-Pprinter] [user...]

このコマンドのオプションの詳細は, pac(8) を参照してください。

10.9    日次,要約,月次の各レポート・ファイルの作成

日次レポート・ファイル,要約レポート・ファイル,月次レポート・ファイルを /var/adm/acct/nite/var/adm/acct/sum,および /var/adm/acct/fiscal の各ディレクトリに作成するために使用できる 4 つのシェル・スクリプトおよび 1 つのコマンドがあります。

コマンド 説明
runacct このシェル・スクリプトは,ディレクトリ /var/adm/acct/nite および /var/adm/acct/sum に,日次ファイルと要約ファイルを作成する。
acctmerg このコマンドは,総合課金レコード・ファイルをマージするコマンドで,これによってユーザは,ファイル,プロセス接続時間,料金,ディスク使用量,プリント・キュー課金レコードを統合して,指定したフォーマットでファイルを作成することができる。 出力は,省略時の設定であるバイナリ形式か,または ASCII 形式で行うことができ,最高 18 欄の課金情報を含めることができる。
prtacct このシェル・スクリプトは,/usr/include/sys/acct.h ヘッダ・ファイル構造体を持つ課金ファイルをフォーマットして表示する。 個々のレコードには,ユーザ識別番号,接続時間,プロセス時間,ディスク使用量,およびプリンタ使用量に関する情報が含まれる。
prdaily このシェル・スクリプトは,前日からの課金データを内容とする ASCII 形式のファイルを作成する。 このスクリプトは,runacct スクリプトから実行されると,/var/adm/acct/sum/rprtmmdd ファイルを作成する。
monacct このシェル・スクリプトは,/var/adm/acct/fiscal ディレクトリに累積プロセス課金ファイルおよび総合課金ファイルを作成する。

以降の各項で,それぞれのシェル・スクリプトおよびコマンドについて詳しく説明します。

10.9.1    runacct シェル・スクリプト

runacct シェル・スクリプトは,課金シェル・スクリプトおよびコマンドを使用して,接続時間,料金,ディスク使用量,キュー,およびプロセス課金の各データベース・ファイルを処理し,ディレクトリ /var/adm/acct/nite および /var/adm/acct/sum に,日次ファイルと要約ファイルを作成します。

/var/adm/acct/nite ディレクトリには,runacct スクリプトによって毎日再使用されるファイルが含まれています。 これらのファイルのうちのいくつかには,バイナリ形式のファイルが /var/adm/acct/sum ディレクトリにあります。 このディレクトリには,累積要約ファイルもあります。 累積要約ファイルは,runacct シェル・スクリプトによって作成および更新されるほか,月次レポートを作成するために monacct シェル・スクリプトによって使用されます。

cron デーモンを設定して runacct シェル・スクリプトを毎日実行させることも,runacct シェル・スクリプトを手動で実行することもできます。 runacct シェル・スクリプトが完了しなかったり,このスクリプトで作成されたファイルが破壊されたり失われたりすると,このコマンドを手動で実行しなければならない場合があります。

runacct シェル・スクリプトを実行すると一時ファイル /var/adm/acct/nite/lock が作成されます。 /var/adm/acct/nite/lock ファイルが存在する場合,runacct シェル・スクリプトは実行されません。

runacct シェル・スクリプトは,次の表に示された順序で,13 の実行状態があり,どの状態でも再起動することができます。

状態 説明
SETUP 課金ファイルのうちのいくつかを設定する。
WTMPFIX acctcon1 などのコマンドの異常終了の原因になる不正な日付およびタイム・スタンプ・エントリを修正する。
CONNECT1 接続セッション・レコードを記述する。
CONNECT2 接続セッション・レコードを使用して,バイナリ総合課金レコードを作成する。 バイナリ課金レコードは,他のレコードとマージされて,日次レポートになる。
PROCESS プロセス課金レポート・ファイルを作成する。
MERGE acctmerg コマンドを使用して,バイナリ総合課金ファイルを作成する。
FEES acctmerg コマンドを使用して,fee ファイルのレコードをバイナリ総合課金ファイルにマージする。
DISK acctmerg コマンドを使用して,ディスク使用量レコードをバイナリ総合課金ファイルにマージする。
QUEUEACCT acctmerg コマンドを使用して,プリント・キュー課金レコードをバイナリ総合課金ファイルにマージする。
MERGEACCT バイナリ総合課金ファイルを,日次総合課金ファイルにコピーする。 この日次ファイルは,累積日次総合課金ファイルを作成するために,acctmerg コマンドへの入力として使用される。
CMS コマンド使用量要約を作成する。
USEREXIT システム固有のシェル・スクリプトを実行する。
CLEANUP 一時ファイルを削除する。

10.9.1.1    runacct シェル・スクリプト・エラーの修正

runacct シェル・スクリプト・エラーが発生すると,メッセージがコンソール・デバイスに書き込まれ,ロック・ファイルが削除されて,診断ファイルとエラー・メッセージが保存された後,処理が停止します。 runacct シェル・スクリプト・エラーが発生したかどうかは,次の情報から判定できます。

runacct シェル・スクリプトが中断または異常終了した場合は,前回正常終了したときの状態でスクリプトを再起動する必要があります。 /var/adm/acct/nite/statefile ファイルには,最後に実行された状態の名前が記述されています。

runacct シェル・スクリプトの構文は次のとおりです。

/usr/sbin/acct/runacct [mmdd] [state]

mmdd 変数には,runacct シェル・スクリプトを実行する日付を指定します。 state 変数には,runacct スクリプトの実行状態を指定します。

2 日以上連続して runacct シェル・スクリプトが実行できない場合は,SETUP 状態に設定し,スクリプトを手動で実行してください。

runacct シェル・スクリプトを再起動する前に,/var/adm/acct/nite/lock ファイルと /var/adm/acct/nite/lastdate ファイルを削除する必要があります。

次の例では,1 月 26 日からの課金データベース・ファイルを使用して,runacct シェル・スクリプトが MERGE 状態で実行されます。

# runacct 0126 MERGE > /var/adm/nite/fd2log&

次の例では,1 月 26 日からの課金データベース・ファイルを使用してシェル・スクリプト nohup コマンドを実行し,シグナル,ハングアップ,ログアウト,および取り消し終了が無視されるように指定します。 その実行中に生成されたエラー・メッセージは,fd2log ファイルに書き込まれます。

# nohup runacct 0126 > /var/adm/acct/nite/fd2log&

10.9.1.2    エラーの例と対策

以下に,エラーの例と,その問題を解決するための対策を示します。

ERROR: locks found. run aborted

/var/adm/acct/nite/lock ファイルが存在します。 このファイルを削除して,最後に終了したときの状態で runacct シェル・スクリプトを再起動してください。

ERROR: acctg already run for Fri : check Jan

現在の日付が,/var/adm/acct/nite/lastdate ファイルに指定されている日付と同じになっています。 このファイルを削除し,最後に終了したときの状態で runacct シェル・スクリプトを再起動してください。

ERROR: runacct called with invalid arguments

runacct シェル・スクリプトで,誤った引数を指定しています。

ERROR: turnacct switch returned rc=?

turnacct switch シェル・スクリプトから accton コマンドを実行したときに異常終了しました。 accton コマンドの保護を調べ,adm ユーザがこのコマンドを実行できるように設定してください。

ERROR: Spacct?.mmdd already exists run setup manually

runacct シェル・スクリプトを MERGE 状態で手動で実行しなければなりません。 疑問符 (?) は,1 文字のワイルドカードを示します。 実際のファイル名には var/adm/Spacct1.1101 のように,バージョン番号と日付が入っています。

ERROR: wtmpfix errors see nite/wtmperror

WTMPFIX 状態のときに,修復不能な wtmp ファイルが検出されました。 fwtmp コマンドを使用してファイルを修正してください。

ERROR: invalid state, check /usr/var/adm/nite/active

処理中に,runacct シェル・スクリプトが壊れた active ファイルを検出した可能性があります。 /var/adm/acct/nite/active* ファイルおよび statefile ファイルを調べてください。

10.9.2    acctmerg コマンド

acctmerg コマンドは,プロセス,接続時間,料金,ディスク使用量,およびキューの各総合課金レコードを tacct ファイル形式で統合します。 たとえば,特定のログイン名およびユーザ識別番号を持つ複数の総合課金レコードをマージして,そのログイン名とユーザ識別番号を持つ 1 つのレコード・グループを作成することができます。 ファイル・レコードは通常,ユーザ識別番号またはユーザ・ログイン名の順にマージされます。

省略時のコマンド出力はバイナリ形式ですが,ASCII 形式の出力も生成することができます。 省略時の acctmerg コマンド出力は,/usr/include/sys/acct.h ヘッダ・ファイル構造体を持ち,最高 18 欄の情報を含みます。 倍精度の 2 つの要素の配列として指定されているデータ型を含む /usr/include/sys/acct.h ヘッダ・ファイル構造体を持つレコードは,就業時間の値と非就業時間の値の両方を含むことができます。

acctmerg コマンドは,runacct シェル・スクリプトによって実行されます。 また,このコマンドを手動で実行してレポートを作成することもできます。 acctmergコマンドの構文は次のとおりです。

/usr/sbin/acct/acctmerg [-ahiptuv] [#] [ file...]

最高 9 つの総合課金レコード・ファイルを指定することができます。 ファイルを指定しない場合は,レコードは標準入力から読み取られます。

このコマンドのオプションの詳細は, acctmerg(8) を参照してください。

次の例は,ASCII 形式のディスク課金ファイル /var/adm/acct/nite/dacct から,UID,LOGNAME,DSK_BLOCKS,および DSAMPS の欄エントリを読み取って,総合課金ファイル /var/adm/acct/sum/tacct のバイナリ・レコードにマージします。

# acctmerg  -i1-2, 13, 18 < nite/dacct | sum/tacct

acctmerg コマンドを使用して,/var/adm/sum/tacct ファイルのエラーを修正することができます。 このファイルで発生する可能性のあるエラーは,負数と,ユーザ識別番号の重複です。

現在の /var/adm/sum/tacct ファイルのエラーを修正するには,次の手順に従ってください。

  1. 作業ディレクトリを /var/adm/sum に変更します。

  2. prtacct コマンドを使用して,/var/adm/sum/tacctprev ファイルを表示します。

    /var/adm/sum/tacctprev ファイルの内容が正しい場合は,/var/adm/sum/tacctmmdd ファイルに問題がある可能性があります。 この例では,/var/adm/sum/tacctmmdd ファイルを修正することで問題が解決することを想定しています。

  3. 次のコマンドを使用して,/var/adm/sum/tacctmmdd ファイルの ASCII バージョンを取得します。

    # acctmerg -v < tacct.0617 > tacct_temp
    

  4. 一時ファイルを編集し,必要に応じてレコードを修正します。

  5. 次のコマンドを使用して,/var/adm/sum/tacctmmdd ファイルを作成し直します。

    # acctmerg -i < tacct_temp > tacct.0617
    

  6. 次のコマンドを使用して,/var/adm/sum/tacct ファイルを作成し直します。

    # acctmerg tacctprev < tacct.0617 > tacct
    

10.9.3    prtacct シェル・スクリプト

prtacct シェル・スクリプトは,tacct ファイル形式のバイナリ総合課金ファイルを ASCII 形式で表示します。 このスクリプトを使用すれば,接続時間,プロセス時間,ディスク使用量,またはプリンタ使用量のレポート・ファイルを作成することができます。

prtacct シェル・スクリプトは,monacct シェル・スクリプトおよび prdaily シェル・スクリプトによって実行されます。 prdaily シェル・スクリプトは,CLEANUP 状態の runacct シェル・スクリプトによって実行されます。 prtacct シェル・スクリプトの構文は次のとおりです。

/usr/sbin/acct/prtacct [-f column] [-v] file

このコマンドのオプションの詳細は, prtacct(8) を参照してください。

10.9.4    prdaily シェル・スクリプト

prdaily シェル・スクリプトは,前日からの課金データのレポートを ASCII 形式で作成します。 prdaily シェル・スクリプトは,CLEANUP 状態の runacct シェル・スクリプトによって実行され,/var/adm/acct/sum/rprtmmdd ファイルを作成します。 手動でこのコマンドを実行して,レポートを作成することもできます。

prdaily スクリプトは,次の 6 つの課金ファイルの情報を統合します。

prdaily シェル・スクリプトの構文は次のとおりです。

prdaily [-l[ mmdd]] | [-c]

このコマンドのオプションに関する詳細は, prdaily(8) を参照してください。

10.9.5    monacct シェル・スクリプト

monacct シェル・スクリプトは,バイナリ課金ファイルを使用して,累積要約ファイルを /var/adm/acct/fiscal ディレクトリに作成します。 要約ファイルが作成された後,このコマンドによって古い課金ファイルが /var/adm/acct/sum ディレクトリから削除され,新しいファイルが作成されます。

通常,monacct スクリプトは,毎月 1 回実行されて,月次レポート・ファイルを作成します。 cron デーモンを設定して,シェル・スクリプトを自動的に実行することもできます。 詳細は,10.2.4 項を参照してください。 monacct シェル・スクリプトの構文は次のとおりです。

/usr/sbin/acct/monacct [number]

number 変数には,1 〜 12 の範囲の整数を指定し,要約レポートを作成したい月を指定します。 省略時の値は現在の月です。

monacct シェル・スクリプトは,次のファイルを /var/adm/acct/fiscal ディレクトリに作成します。

tacctmm

mm 変数で指定されている月の前月のバイナリ総合課金ファイルを指定します。

cmsmm

mm 変数で指定されている月の前月のバイナリ累積コマンド一覧ファイルを指定します。

fiscrptmm

ASCII 形式の総合月次課金レポート・ファイルを指定します。 このファイルは,レポート・ファイル /var/adm/acct/sum/rprtmmdd と同じ形式で,次のファイルから作成されます。