gpt4 book ai didi

linux - 为什么当我用 Nagios 调用 ps 时,它在我的 Perl 脚本中只返回一行输出?

转载 作者:可可西里 更新时间:2023-11-01 11:51:04 25 4
gpt4 key购买 nike

我有这个运行:

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

如果在本地调用,循环运行得很好,对于 ps -eLf

的每个输出行一次

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

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

也许这根本不限于/由 Nagios 引起,为了完整起见,我只是将它包括在内。

我在 SUSE Enterprise Linux 10 SP2 和 perl v5.8.8 上。

最佳答案

虽然这个问题很老了,但我今天遇到了完全相同的问题。所以我想我分享我的发现。问题是 NRPE 守护进程创建的进程(可以)与您作为 NRPE 守护进程用户直接在 shell 中执行的进程具有不同的环境。

我创建了以下 bash 脚本:

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

这给了我当前进程的环境变量 COLUMN,它与父进程(由 NRPE 守护进程派生的进程)具有相同的环境。

当我以 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 环境变量。

关于linux - 为什么当我用 Nagios 调用 ps 时,它在我的 Perl 脚本中只返回一行输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/513354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com