[Pandora-jp] module_execとコマンドラインの結果相違

三反田@ひむか流通ネットワーク santanda @ himuka.ne.jp
2016年 1月 28日 (木) 15:33:50 JST


さんたんだです。

菊池様

レスありがとうございました。助かりました。
実装してみます。


On 2016/01/28 15:22, KIKUCHI Koichiro wrote:
> 菊地です。
> 
> module_exec は、内部的には Perl のバッククォート演算子を使ってコマンドを
> 実行していて、これは文字列を sh -c を使って実行するので、その sh -c
> のプロセスを拾ってしまっているのだと思います。
> 
> ターミナルで確認する場合は、以下のように perl -e で確認すると確実です。
> 以下のように sh -c しているプロセスが拾えると思います。
> 
>    % perl -e 'print `ps ax | grep java | grep AAAA`'
>    21390 pts/26   S+     0:00 perl -e print `ps ax | grep java | grep AAAA`
>    21391 pts/26   S+     0:00 sh -c ps ax | grep java | grep AAAA
> 
> ちょっとクォート地獄で見づらいですが、module_exec で実行しているコマンド
> を perl を使って実行すると出力が sh -c ps になるのも確認できると思います
> (NR==2 にしています)
> 
>    % perl -e 'print `ps ax | grep java | grep AAAA | awk '"'"'NR==2{print \$5,\$6,\$7}'"'"'`'
>    sh -c ps
> 
> sh -c のプロセスを除外する方法はいろいろありますが、例えば正規表現を
> [j]ava にすると引っかからなくなります。
> 
>    % perl -e 'print `ps ax | grep [j]ava | grep AAAA`'
> 
> お試し下さい。
> 
> --
> 菊地宏一郎 <koichiro @ pandorafms.jp>
> 
> At Thu, 28 Jan 2016 00:52:34 +0900,
> 三反田@ひむか流通ネットワーク <santanda @ himuka.ne.jp> wrote:
>>
>> さんたんだです。
>>
>> pandora上の module_exec と出力結果と、単純にターミナルで
>> 同じコマンドを叩いた時のと出力結果が相違する事象に悩まされて
>> おります。
>> 設定がミスっているのか、他に何か解決策がないのかご教示頂けると
>> とても助かります。
>>
>> 以下の事例でご説明します。
>>
>> このmodule_exec条件で、正常にステータスが取得出来ています。
>> ■正常時パターン
>> ・pandora_agent.conf内の設定(抜粋)
>> module_exec ps ax | grep java | grep AAAA | awk 'NR==1 {print $5" "$6" "$7}'
>>
>> ■デバッグモードでのXMLデータ出力結果(抜粋)
>> <module>
>> <name><![CDATA[AAAA status]]></name>
>> <description><![CDATA[AAAA status]]></description>
>> <type>generic_data_string</type>
>> <data><![CDATA[java -Xmx512m AAAAjvm.rc.AjRc]]></data> →正常時
>> </module>
>>
>> それが、時間が経過すると次のようなXMLデータ出力結果に勝手に変します。
>>  ※サービス等の停止操作などは行っていません。
>>
>> ■デバッグモードでのXMLデータ出力結果(抜粋)
>> <module>
>> <name><![CDATA[AAAA status]]></name>
>> <description><![CDATA[AAAA status]]></description>
>> <type>generic_data_string</type>
>> <data><![CDATA[sh -c ps]]></data> →異常時
>> </module>
>>
>> コマンドで叩いた時には標準出力がされないのですが、何故かmodule_execでは
>> こうなります。
>> 試しに条件指定を次のように変更しても、最初は正常取得なのですが、途中から
>> 上記と同じく異常になります。イタチごっこです。
>> ※明示的に2行目を取得する
>> module_exec ps ax | grep java | grep AAAA | awk 'NR==2 {print $5" "$6" "$7}'
>> _______________________________________________
>> Pandora-jp mailing list
>> Pandora-jp @ pandorafms.jp
>> http://pandorafms.jp/mailman/listinfo/pandora-jp
> _______________________________________________
> Pandora-jp mailing list
> Pandora-jp @ pandorafms.jp
> http://pandorafms.jp/mailman/listinfo/pandora-jp
> 



Pandora-jp メーリングリストの案内