3

私はこれを実行しています:

if (open(PS_ELF, "/bin/ps -eLf|")) {
  while (<PS_ELF>) {
    if ($_ =~ m/some regex/) {
      # do some stuff
    }
  }
}

ローカルで呼び出された場合、ループは出力行ごとに 1 回、問題なく実行されます。ps -eLf

同じスクリプトがNagiosからNRPE経由で呼び出された場合、 にPS_ELFは 1 行しか含まれません ( によって出力される最初の行ps)。

これは私を困惑させます。何が理由でしょうか?

おそらく、これは Nagios に限定されるものではなく、Nagios によって引き起こされるものではありません。完全を期すために含めただけです。

私は SUSE Enterprise Linux 10 SP2 と perl v5.8.8 を使用しています。

4

3 に答える 3

2

この問題は非常に古いものですが、今日まったく同じ問題が発生しました。それで、私が見つけたものを共有すると思いました。問題は、NRPE デーモンによって作成されたプロセスが、NRPE デーモン ユーザーとしてシェルで直接実行するプロセスとは異なる環境を持つ (可能性がある) ことです。

次の bash スクリプトを作成しました。

#!/bin/bash
echo `env | grep COLUMNS`

これにより、親プロセス (NRPE デーモンによってフォークされたプロセス) と同じ環境を持つ現在のプロセスの環境変数 COLUMN が得られます。

このスクリプトをNRPEデーモンユーザーとして実行すると

$ /tmp/check_env.sh
COLUMNS=174

現在のシェル ウィンドウの値がわかります。しかし、NRPE 経由でこのスクリプトを実行すると、次のようになります。

nagios-server $ check_nrpe -H client -c check_env
COLUMNS=80

COLUMNS 環境変数を無視する無制限の幅の ww パラメータを使用しない限り、 ps -eaf 出力が 80 文字に制限されるのはそのためです。

于 2011-04-12T11:57:37.220 に答える
2

'ps -eLf' を 'ps -eLfww' (無制限出力の ww) に変更したところ、リモートで呼び出したときに違いがある理由がわからなくても、これで問題が解決しました。

于 2009-02-05T18:00:57.663 に答える
1

おそらく、Perl 自体よりも NRPE プラグインがどのように機能するかに関係している可能性があります。

あなたのプラグインはここで説明されているように機能しています(戻りコード + 出力) ?

于 2009-02-04T22:07:04.317 に答える