linux-为什么用Nagios调用ps时,ps在Perl脚本中仅返回一行输出?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux-为什么用Nagios调用ps时,ps在Perl脚本中仅返回一行输出?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1025字,纯文字阅读大概需要2分钟。
内容图文
![linux-为什么用Nagios调用ps时,ps在Perl脚本中仅返回一行输出?](/upload/InfoBanner/zyjiaocheng/949/1f857f3d7a164bf2b255e5864b09b177.jpg)
我正在运行:
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 /由Nagios引起,为了完整起见,我仅将其包括在内.
我正在使用SUSE Enterprise Linux 10 SP2和perl v5.8.8.
解决方法:
尽管此问题非常古老,但我今天遇到了完全相同的问题.
所以我以为我分享我的发现.
问题在于,由NRPE守护进程创建的进程(可以)所具有的环境不同于您以NRPE守护进程用户的身份直接在外壳中执行的进程.
我创建了以下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时,ps在Perl脚本中仅返回一行输出?全部内容,希望文章能够帮你解决linux-为什么用Nagios调用ps时,ps在Perl脚本中仅返回一行输出?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。