Nagios BAT 文件未返回正确的状态代码

Nagios BAT 文件未返回正确的状态代码

我为 Windows 服务器编写了一个批处理文件,用于检测某个服务是否正在运行,如果未运行,则向 Nagios 返回“严重”状态。该脚本运行良好(因为它可以判断进程是否正在运行,我已尝试使用正在运行的服务和未运行的服务),并返回正确的字符串,但无论它返回哪个字符串,Nagios 中的状态始终正常。

以下是代码(显然,各种变量名称都被掩盖了):

@Echo Off
Set ServiceName=ServiceNameGoesHere

SC queryex "%ServiceName%"|Find "STATE"|Find /v "RUNNING">Nul&&(
    echo CRITICAL: Service not running!
    exit /b 2

)||(
    echo OK: Service active.
    exit /b 0
)

以下是 Nagios 中的匹配部分:

define service {
         host_name               myWindowsServer
         use                     local-service
         service_description     Service Active Check
         check_command           check_ncpa!-P 5693 -M 'plugins/service_check.bat'
         notification_options    w,c
         contacts                nagiosadmin
         register                1
}

奇怪的是,如果我在主机服务器的命令行上手动运行 BAT 文件,然后运行echo %errorlevel%它,它会返回正确的状态代码(2 或 0)。Nagios 似乎只看到 0 状态,因为它一直为两者返回 OK,尽管获得了正确的字符串。

我的服务器绝大多数都是 Linux,所以我以前只使用 shell 脚本编写过脚本,并且这些脚本可以正确返回状态。我做错了什么?

答案1

我重新调整了 if 语句逻辑并且让它正常工作:

@Echo Off
Set ServiceName=ServiceNameGoesHere

SC queryex "%ServiceName%"|Find "STATE"|Find /v "RUNNING">NUL
if %errorlevel% == 0 (echo CRITICAL: Service not running! & exit /b 2)
if %errorlevel% == 1 (echo OK: Service active. & exit /b 0)

当指定的服务未运行时,将返回 2;当指定的服务正在运行时,将返回 0,并返回正确的字符串。

相关内容