「事件は枯れたシステムが稼働する現場で起こってるんだ」と現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、プロセスの開始/終了時刻および終了ステータスを確認するacctcomコマンドの活用法を紹介する。
Solaris 9上でサーバクライアント型アプリケーションを運用しています。これまで正常に動作していたサーバプログラムが異常終了し、クライアントプログラムからアクセスできなくなってしまいました。原因解析のため、サーバプログラムがインストールされているシステムの/var/adm/messagesファイル*と、サーバプログラムのログファイルの内容を確認しましたが、何も情報が残っていません。このような場合、サーバプログラムがどのような状況で終了したのかを調べる方法はありませんか?
プログラムが異常終了したにもかかわらず、ログファイルに何も残っていない場合には、次のような情報が原因解析の手がかりとなります。
質問のケースでは、acctcomコマンドによってプロセスの開始/終了時刻および終了ステータスを確認できます。なお、Solaris 9におけるacctcomコマンドは、システムアカウンティング*の一部として実装されているので、事前にシステムアカウンティングを起動しておく必要があります。
以下、最小限のシステムアカウンティング設定、およびacctcomコマンドの利用方法について説明します。
システムアカウンティングが設定されていない場合は、以下の作業を行ってください。
まずはpkginfoコマンドを実行して、SUNWaccrパッケージとSUNWaccuパッケージがインストールされていることを確認します。
% pkginfo
/etc/init.d/acctスクリプトのリンクによって、システムアカウンティングの起動スクリプト/etc/rc2.d/S22acctと、停止スクリプト/etc/rc2.d/K22acctを作成します。
# ln /etc/init.d/acct /etc/rc2.d/S22acct
# ln /etc/init.d/acct /etc/rc2.d/K22acct
これによって、システム起動時にアカウンティングシステムが自動実行され、システム停止時には自動的に停止されます。
システムアカウンティングを起動すると、各プロセスの終了時に起動/終了時刻や終了ステータスなどの情報が/var/adm/pacctファイルへ書き込まれます。ただ、/var/adm/pacctファイルのサイズは、短時間のうちに極めて大きくなるため、
などの目的から、500ブロックごとに分割してくれるckpacctコマンドをcrontabファイルに設定しておくとよいでしょう。
例えば、1時間ごとにckpacctコマンドを実行する場合は、admユーザーのcronを設定するため、
# crontab -e adm
と「-e adm」オプション指定でcrontabコマンドを実行して、次のような内容を追加します。
0 * * * * /usr/lib/acct/ckpacct
なお、ckpacctコマンドは、分割したファイル/var/adm/pacctN(Nは0、1、……)の移動/削除は行わないので、それらの作業はシステム管理者が定期的に実行する必要があります。
/etc/init.d/acctスクリプトにstartオプションを指定するか、あるいはシステムの再起動を行って、アカウンティングシステムを起動します。
# /etc/init.d/acct start
システム関連のメッセージが記録されているファイル。
プログラムがエラーにより不正終了する際、メモリやレジスタの内容をディスクに記録すること、あるいは記録したファイル。
システムの利用状況を収集する機能。システムアカウンティングで提供している機能や、設定方法の詳細については、こちらを参照。
Copyright © ITmedia, Inc. All Rights Reserved.