我有一个powershell脚本,可以通过check_nrpe调用。当我执行被动检查时,我看到退出代码/返回值为1,但仍被视为OK状态,而不是CRITICAL。
基本上,此脚本仅检查目标文件夹 .. \ bar 是否为空。如果其为空,则脚本返回“ 0”,这会触发Nagios中的 OK 状态。如果它的文件甚至在等待25秒后仍不移动,则返回“ 1”,这会触发Nagios中的CRITICAL状态。
我在文件夹中保留了几个文件,可以看到返回值为'1'。但是nagios仍将其视为状态确定。
使用以下命令进行被动检查。
$ /usr/lib64/nagios/plugins/check_nrpe -H 10.XX.X.XXX -c check_kpis -t 30
Outout
1
脚本如下。
$path = "D:\foo\bar"
$flagged1 = "D:\temp\flag1.txt"
$flagged2 = "D:\temp\flag2.txt"
$contents = Get-ChildItem -Path $path -Force -Recurse
if ( $contents.count -gt 0 )
{
$contents.Name | Out-File -FilePath $flagged1
Start-Sleep -s 25
$contents = Get-ChildItem -Path $path -Force -Recurse
$contents.Name | Out-File -FilePath $flagged2
if ( $contents.count -gt 0 )
{
$diff = Compare-Object -ReferenceObject $(Get-Content $flagged1) -DifferenceObject $(Get-Content $flagged2) -IncludeEqual
If ($diff.SideIndicator -eq "==")
{
return 1
exit
}
else
{
return 0
exit
}
}
else
{
return 0
exit
}
}
else
{
return 0
exit
}
有人可以在这里提出什么问题吗?
答案 0 :(得分:1)
确定状态的是EXIT代码,您使用的返回值甚至不在函数中。这样的东西会更好
$path = "D:\foo\bar"
$flagged1 = "D:\temp\flag1.txt"
$flagged2 = "D:\temp\flag2.txt"
$contents = Get-ChildItem -Path $path -Force -Recurse
if ( $contents.count -gt 0 )
{
$contents.Name | Out-File -FilePath $flagged1
Start-Sleep -s 25
$contents = Get-ChildItem -Path $path -Force -Recurse
$contents.Name | Out-File -FilePath $flagged2
if ( $contents.count -gt 0 )
{
$diff = Compare-Object -ReferenceObject $(Get-Content $flagged1) -DifferenceObject $(Get-Content $flagged2) -IncludeEqual
If ($diff.SideIndicator -eq "==")
{
echo 1
exit 1
}
else
{
echo 0
exit 0
}
}
else
{
echo 0
exit 0
}
}
else
{
echo 0
exit 0
}
答案 1 :(得分:0)
当你在 Nsclint.ini 文件中定义你的 powershell 命令时,你必须像这样定义你的脚本:
check_esomething=cmd /c echo scripts\check_something.ps1; exit($lastexitcode) | powershell.exe -command -
因此您必须在定义中添加“exit($lastexitcode)”语句。
享受吧!