代码之家  ›  专栏  ›  技术社区  ›  Node

为什么在我用Nagios调用Perl脚本时,ps只返回一行输出?

  •  3
  • Node  · 技术社区  · 16 年前

    我正在运行此程序:

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

    ps -eLf

    现在,如果从调用相同的脚本 Nagios 通过 NRPE PS_ELF 仅包含一行(输出的第一行) ps ).

    这让我困惑;原因可能是什么?

    我使用的是SUSE Enterprise Linux 10 SP2和perl v5.8.8。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Node    16 年前

    我将“ps-eLf”更改为“ps-eLfww”(ww用于无限输出),这解决了这个问题,即使我不理解远程调用时为什么会有差异。

        2
  •  2
  •   xorpaul    14 年前

    虽然这个问题很老了,但我今天遇到了完全相同的问题。 所以我想我分享我的发现。

    我创建了以下bash脚本:

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

    当我以NRPE守护进程用户的身份执行此脚本时

    $ /tmp/check_env.sh
    COLUMNS=174
    

    它为我提供了当前shell窗口的值。 但当我通过NRPE执行此脚本时,我得到:

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

    这就是ps-eaf输出限制为80个字符的原因,除非您将ww参数用于无限宽度,这会忽略COLUMNS环境变量。

        3
  •  1
  •   sebthebert    16 年前

    与Perl本身相比,NRPE插件的工作方式可能更重要。

    你的插件工作正常 here (返回代码+输出)?

    推荐文章