« FTP 専用のユーザアカウントの登録 | メイン | TCP Wrapper を有効にする方法(Solaris9) »

2005年6月17日

プロセスcore の保存場所

質問:

プロセスで障害が発生し、コアダンプを生成した場合にプロセスの作業ディレク
トリに作成されます。コアダンプの保存先を別のディレクトリに変更する方法は
ありますか。また、生成を抑制することも可能でしょうか。
---------------------------------------------

回答:

coreadm コマンドによってプロセスの core ファイルを制御することができます。
具体的には、“core ファイルを作成するかどうか“ と“core ファイルを作成する
場合、どのファイル名で作成するか“ が設定可能です。

現在のシステム全体の設定は、以下のようにして確認することができます。

----------------------------------------------------------------
% coreadm
グローバルコアのファイルパターン: ー *1
init コアのファイルパターン: core ー *2
グローバルコアダンプ: disabled ー global core
プロセス単位コアダンプ: enabled ー per-process core
グローバル setid コアダンプ: disabled ー global setid core
プロセス単位 setid コアダンプ: disabled ー per-process setid core
グローバルコアダンプのロギング: disabled
----------------------------------------------------------------

【core を作成するかどうかの設定】

coreadm コマンドでは、作成される core ファイルのオーナに依存して、global
core と per-process core というように呼び分けています。

global core : ファイルオーナは root
per-process core : ファイルオーナはプロセスのオーナ


出力結果の項目で言うと、global core = グローバルコアダンプ、per-process
core = プロセス単位コアダンプです。各々、enabled になっていれば core を
作成し、disabled になっていると core を作成しません。デフォルトでは、
per-process core は作成、global core は作成しない設定になっています。

また、上記の中でも、特に setid(setuid/setgid) が設定されたプロセスの
core を作成するかどうかを決めているのが、グローバル setid コアダンプと
プロセス単位 setid コアダンプの項目です。これらは、セキュリティ上の理由
から、デフォルトでは作成しない設定になっています。

各 core の enabled/disabled を切り替えるには、-e と -d オプションを使用
します。この設定は、root でのみ設定可能です。

[例] global core を enabled にする。
(* disabled にするためには -d を指定します。)

# coreadm -e global

なお、global core と per-process core の設定はお互いに依存しないため、
両方を enabled にすると、同じ内容でオーナの異なる core ファイルが 2 つ
作成されることになります。


【core の出力先を変更する設定】

global core の出力先は、root ユーザのみ設定可能で、-g オプションを使用
します。coreadm で出力される項目で言うと、グローバルコアのファイルパタ
ーン(*1)が該当します。

# coreadm -g /var/core/core.%p
→ global core を /var/core/core. という名前で作成する

# coreadm << 確認
グローバルコアのファイルパターン: /var/core/core.%p
init コアのファイルパターン: core
:

per-process core の出力先は、デフォルトではカレント・ワーキング・ディレ
クトリに core という名前で作成されるようになっていますが、root あるいは
プロセスのオーナによって変更可能です。

厳密に言うと、core 出力先の設定は、設定後に起動された子プロセスに引き継
がれますので、特に指定しない限り、全てのプロセスは起動時 init プロセスに
指定された per-process core の出力設定(*2)をそのまま使用します。init プ
ロセスへの指定は -i オプションを使用し、root ユーザのみが指定可能です。

# coreadm -i core.%p
→ init に対して per-process core をカレント・ワーキング・
ディレクトリに core. という名前で作成するように指定

# coreadm << 確認
グローバルコアのファイルパターン:
init コアのファイルパターン: core.%p
:

init プロセスから引き継がれた設定ではなく、各プロセスごとに出力先の設定
を変えたい場合は、-p オプションを使用します。-p オプションは、root もし
くはプロセスのオーナが指定可能です。

% coreadm -p core.%f
→ のプロセスに対して、per-process core をカレント・
ワーキング・ディレクトリに core. と
いう名前で作成するように指定

% coreadm << 確認
: core.%f


【ユーザごとに出力先の設定を行いたい場合】

前述の通り、core の出力設定は、システム全体で行うもの(global core、あるい
は per-process core のデフォルト設定)と、プロセスごと(プロセス別の per-
process core 設定)に行うものの2種類となります。

ただし、ユーザのログインシェルのプロセスに対して per-process core の設定
を行うことで、ユーザごとの core 出力先を変更することができます。

% coreadm -p $HOME/core.%p $$

% coreadm $$
748: /export/home/test/core.%p

上記は、現在実行中のシェルプロセスに対して per-process core の設定を行っ
ていますが、この記述をログイン時に読み込まれるプロファイルに追加します。
($$ は実行中のシェルプロセスの pid を意味する)

プロファイルは、csh の場合 $HOME/.login、sh/ksh の場合は $HOME/.profile
が良いと思います。

[例]
% vi $HOME/.login
:
coreadm -p $HOME/core.%p $$


【各オプションが有効になるタイミング】

前述のオプション(-e/-d, -g, -i, -p)は、すべて実行した時即座にに有効と
なります。ただし、-p だけが一時的な変更であるのに対し、他のオプション
は /etc/coreadm.conf ファイルに保存されて、リブート後も有効となります。

投稿者 AJ : 2005年6月17日 17:47

トラックバック

このエントリーのトラックバックURL:
http://www.factory-aj.com/cgi/mtctrl/mt-tb.cgi/158

 
Powered by Movable Type 4.27-ja | RSS1.0 | RSS2.0 | ATOM