System::ProcWatch はちょっとしたクラスを集めたもので、 システムのプロセスを容易に監視できるようにします。これは、 Unix のプログラム procps (ps) に基づいています。
System::ProcWatch を使用するには、System::ProcWatch の操作に基づいたルールセットを定義しなければなりません。 ルール (あるいはジョブ、ウォッチ) とは、ある条件が true と評価された際にどんなアクションが起こるのかを決めるものです。
これ以降は後で書きます……。
System::ProcWatch を、PHP スクリプト以外から使用することもでき、 そのために利用するシェルスクリプト procwatch および procwatch-lint が同梱されています。
procwatch コマンドは、システムの調査のために使用します。 デーモンとして実行するか、あるいは cron で実行します。
使用法は procwatch -h の出力を参照ください。
USAGE: $ procwatch (-x|-i) <file> [-d [-s <sec>]] [-a <args>] [-p <file>] OPTIONS: -x | --xml= path to XML configuration file -i | --ini= path to INI configuration file -d | --daemon run procwatch in daemon mode -s | --sleep= seconds to sleep in daemon mode (default=1800) -a | --args= arguments that should be passed to ps (default=aux) -p | --php= php file that should be included -h | --help this help message EXAMPLE: $ procwatch -x /etc/procwatch.xml -d -s 3600 This command will run procwatch in daemon mode with an interval of an hour using the configuration file '/etc/procwatch.xml' |
procwatch-lint は、XML で書かれた procwatch の設定ファイルの妥当性を検証するためのものです。 XML::DTD::XmlValidator を利用しています。
こちらも同様に、使用法については procwatch-lint -h の出力を参照ください。
USAGE: $ procwatch-lint -c <file> [-d <dtd>] [-v] OPTIONS: -c | --conf= path to XML configuration file -d | --dtd= path to DTD -v | --verbose verbose output on errors -h | --help this help message EXAMPLE: procwatch-lint -c /etc/procwatch.xml This command will validate the configuration file '/etc/procwatch.xml' using the DTD at '/usr/share/pear/data/System_ProcWatch/procwatch-1.0.dtd' |
System::ProcWatch アプリケーションの設定は、以下の三通りの方法で行えます。
XML 形式の文字列/ファイル
INI ファイル
PHP の配列
System::ProcWatch の設定は、XML で行うことを推奨します。 この方式は、シンプルであると同時に高機能でもあります。
XML 設定ファイル/設定文字列のルート要素となるのが procwatch 要素です。この要素には省略可能な属性 version があり、暗黙的に "1.0" と設定されます。
procwatch 要素は、ルールセットを表すものです。 その子要素がルール群を表します。
ルート要素 procwatch の直接の子要素となるのが watch 要素です。これは一回あるいは複数回登場します。
watch 要素には必須属性がひとつあります。それが name 属性で、ウォッチ (あるいはジョブ、ルール) の名前を "httpd-count" のように指定します。
個々の watch 要素が、それぞれひとつのルールを表します。 検索に使用する正規表現や評価条件、そして実行するアクションといった内容が その中に含まれます。
pattern 要素の内容は perl 互換の正規表現で、 ps の出力の特定のカラムを評価するために使用します。
必須属性は match です。 ps の出力のカラム名を小文字にしたもの、例えば "command" や "vsz" を指定します。
このおかげで、System::ProcWatch は非常に多目的に使用できるようになっています。 また、procps プログラムが存在するあらゆるプラットフォームで使用できます。
pattern 要素の内容は perl 互換の正規表現で、 match 属性で定義したカラムに対して マッチを行います。正規表現には、開始と終了のデリミタを 必ず含めなければなりません。また、中では任意の PCRE 修飾子を使用することができます。
例: <pattern match="command">/sbin\/httpd/</pattern>
condition 要素は、条件を指定します。 これが TRUE と評価されたときに、後で定義するアクションが実行されます。
condition 要素には、必須属性と任意属性がひとつずつあります。 必須属性は type でこれは "presence" あるいは "attr" のいずれかでなければなりません。 任意属性は attr です。しかし、 type 属性の値が "attr" である場合は attr 属性も必須となります。
attr 属性は、 "user" や "%mem" など procps の出力のカラムを表します。
type 属性の内容によって、 condition 要素の構文や振る舞いは異なります。
condition の type が "presence" の場合、中身は空となることもあります。 この場合、常に true と評価されます。
condition の子要素として、以下の要素が存在します。
min
見つかった値がこの値以上でなければなりません。
max
見つかった値がこの値以下でなければなりません。
is
見つかった値がこの値と等しくなければなりません。
isnot
見つかった値がこの値と違っていなければなりません。
sum
見つかった値の総和がこの値を超えてはなりません。
これらを組み合わせ、例えば min と max で範囲を指定することなどができます。
execute 要素では、 condition にあてはまった場合に行われるアクションを定義します。
必須属性は type で、これは "shell" あるいは "php" のいずれかでなければなりません。
一目瞭然でしょうが、execute 要素の中身が シェル (shell_exec() を用いて) あるいは PHP (eval() を用いて) のいずれかで実行されるわけです。
execute 要素は、複数指定することができます。
execute の文の中では、以下のような特殊変数が使用可能です。
$msg
ここには、何が起こったのかなどの一般的なメッセージが含まれます。 シングルクォートで囲まれた形式で、シェルや PHP の実行結果が得られます。
$pids
ここには、見つかったすべてのプロセスの PID が含まれます。 シングルクォートと括弧で囲まれた形式となります。
例: '(433, 444, 455, 466)'
$procs
これは PHP の配列を文字列形式にシリアライズしたもので、 ps から得られるすべての情報を含んでいます。 array(array('pid' => 344, 'command' => '/usr/sbin/httpd' ...)) のような形式になります。
これは PHP で実行した場合にのみ使用可能で、 関数コールバックに使用できます。
<execute type="php">get_procs($procs);</execute>
例 63-1XML 設定ファイル
|
例 63-2INI 設定ファイル
|
例 63-3PHP 設定配列
|