2013-08-07 32 views
0

下面是我的脚本,其中我使用jvmtop.sh脚本的输出存储在受尊敬的变量中,并稍后用图形在nagios中处理。Nagios插件脚本不按预期方式工作

在客户端服务器bash中,脚本按预期输出。但是当我在nagios中执行Test check命令时,似乎./jvmtop.sh不会将输出存储在变量中。我正在“关键 - 监视进程没有运行!”

让我知道我缺少什么..

get_vals() { 
current=/usr/local/nagios/libexec/ 
cd $current   
OLDIFS=$IFS     
IFS='\n'   
tmp_output=$(./jvmtop.sh --once | grep $process) 
IFS=$OLDIFS 
    if [ -z "$tmp_output" ] 
    then 
     echo "CRITICAL - Process to monitor is not running!" 
     exit $ST_CR 
    fi 
PID=`echo ${tmp_output} | awk '{print $1}'` 
HPCUR=`echo ${tmp_output} | awk '{print $3}' | sed 's/.$//'` 
HPMAX=`echo ${tmp_output} | awk '{print $4}' | sed 's/.$//'` 
NHCUR=`echo ${tmp_output} | awk '{print $5}' | sed 's/.$//'` 
NHMAX=`echo ${tmp_output} | awk '{print $6}' | sed 's/.$//'` 
CPU=`echo ${tmp_output} | awk '{print $7}' | sed 's/.$//' | cut -d . -f 1` 
GC=`echo ${tmp_output} | awk '{print $8}' | sed 's/.$//' | cut -d . -f 1` 
THREAD=`echo ${tmp_output} | awk '{print $11}'` 
} 
+0

也尝试导出JAVA_HOME = {它的路径}在你自己的shell脚本的顶部,所以当nagios运行它时 - 它可以找到它 - – Vahid

回答

0

我个人认为这可能是由于上线120 jvmtop.sh的定义,我的建议是给的完整路径的脚本....

tmp_output=$(./jvmtop.sh --once | grep $process) 

tmp_output=$(/path/to/jvmtop.sh --once | grep $process) 

如果这没有帮助,请尝试启用调试和定义d nagios.cfg中的ebug级别:

debug_level=2048 
debug_file=/var/log/nagios_debug.log 

完成后请关闭此功能。

E2A: 最后一件事是在此行(120)之后将tmp输出的结果回显到临时文件并查看其输出以查看它是否真的有效!

这样回声$ tmp_output> /tmp/observe.txt

,因为我的我的怀疑仍然是这个 - 我给上面的注释也出口了,因为它要么无法找到这个你的java的家jvmtop.sh或者它可以不知道$ JAVA_HOME/bin/java是什么...

+0

嗨,我尝试了所有的步骤。但严重的是,这让我疯狂。它看起来不像nrpe守护进程在主脚本中实际执行下标(jvmtop.sh)。我没有输出tmp_output。同时谷歌搜索不显示任何信息如何可以在内部插件使用下标。 – Johnbritto

+0

怀疑它与nrpe有什么关系 - 它实际上缺少一些东西,它不能执行jvmtop.sh在主脚本中尝试寻找或导出环境变量(如SHELL PATH等),将其他脚本调用替换为数字这是成功的,看看是否有效 - 你可以随时看看把jvmtop.sh脚本作为一个函数在你的主脚本中 - 但我仍然认为有些东西不能用于这种工作方式 – Vahid

+0

vahid,请执行我..我在设置PATH时犯了一个错误。在我的MAIN脚本中导出JAVA_HOME =/usr/java/jdk1.6xxx解决了这个问题。感谢您的宝贵时间。 – Johnbritto