Nagios-NSClient ++无法运行包含的外部脚本

Nagios-NSClient ++无法运行包含的外部脚本

我在 Centos 7 机器上运行 Nagios 3.5。该设置用于通过 NRPE(check_nrpe 命令)监控一些 Windows 机器。目前,我正在使用“nsclient-full.ini”文件中预配置的“别名”命令。到目前为止,一切都运行良好。

我想使用“alias_updates”命令监控主机上的 Windows 更新状态。

; alias_updates - Alias for alias_updates.
alias_updates = check_updates -warning 0 -critical 0 ShowAll=long

以下是定义所有外部脚本的部分:

; A list of scripts available to run from the CheckExternalScripts module.
[/settings/external scripts/scripts]
check_updates=C:\Program Files\NSClient++\scripts\check_updates.vbs

当然,我已经检查过我提供的路径中是否存在“check_updates.vbs”。毕竟,它是与 NSClient++ 捆绑在一起的。

我已经启用外部脚本的执行:

; Check External Scripts - A simple wrapper to run external scripts and batch files.
CheckExternalScripts = 1

其他相关的配置选项(在我看来)是:

; Section for NRPE (NRPEServer.dll) (check_nrpe) protocol options.
[/settings/NRPE/server]

; COMMAND ARGUMENT PROCESSING
allow arguments = true

; COMMAND ALLOW NASTY META CHARS
allow nasty characters = false

; PORT NUMBER - Port to use for NRPE.
port = 5666


; Section for external scripts configuration options (CheckExternalScripts).
[/settings/external scripts]

; COMMAND ARGUMENT PROCESSING
allow arguments = true

; COMMAND ALLOW NASTY META CHARS
allow nasty characters = false

; SCRIPT DIRECTORY
script path = 

; COMMAND TIMEOUT
timeout = 60

在 Nagios 服务器上,从命令提示符中,我尝试执行以下操作:

[root@mama365-account plugins]# ./check_nrpe -H 192.168.10.13 -c alias_updates

我收到的答复是这样的:

ExternalCommands: failed to create process (C:\Program Files\NSClient++\scripts\check_updates.vbs): it is not an exe file (check NSC.log for more info) - failed to lookup error code: 193( reson: 87)

我知道 NSClient 可以运行非可执行文件 (*.exe) 的插件,而只是脚本。而这个是 VB 脚本。此外,Nagios GUI 中与命令对应的框中也显示了相同的错误消息。

有人知道如何修复这个问题吗?阅读 NSClient++ 的文档只让我走了这么远...

更新 1:

我严格按照 Michael Medin 提供的说明进行操作。现在我的“nsclient-full.ini”如下所示:

; A list of wrappped scripts (ie. using the template mechanism)
[/settings/external scripts/wrapped scripts]
check_updates=scripts\check_updates.vbs

; VISUAL BASIC WRAPPING - 
vbs=cscript.exe //T:30 //NoLogo %SCRIPT% %ARGS%

问题是,现在我遇到了另一个错误,这次与 vb 脚本的执行有关:

C:Program FilesNSClient++scriptscheck_updates.vbs(15, 1) Microsoft VBScript runtime error: Class not defined: 'NagiosPlugin' 

顺便说一句,看起来插件返回了“OK”,因为 Nagios 中相应的框是绿色的。

更新2:

在 NSClient++ 论坛中搜索后,我发现有人遇到了同样的问题。原来是我漏了一个“\”:

check_updates=scripts\check_updates.vbs

应该:

check_updates=scripts\\check_updates.vbs

但我仍然无法让它工作。现在看来脚本的通信和执行正常,但操作超时。如果我使用命令行中的“-t”选项将超时时间覆盖为 120 秒,我会收到以下错误消息:

CHECK_NRPE: Received 0 bytes from daemon.  Check the remote server logs for error messages.

答案1

正如 krisFR 指出的那样,您需要在 vbs 文件前面加上 cscript.exe (以及其他各种选项)。

Windows 中的脚本与 Unix 中的脚本不同,因此它们本身不能“运行”。因此,所有脚本都必须以其运行时作为前缀。

理论上,这应该记录在这里:http://docs.nsclient.org/howto/external_scripts.html#languages但我发现它丢失了所以我将尽快更新它。

check_updates=cscript.exe //T:30 //NoLogo "scripts\\check_updates.vbs"

解决这个问题的另一种方法是使用 NSClient++ 中所谓的“包装”脚本,然后您可以定义如何执行各种扩展的“宏”:

[/settings/external scripts/wrappings]
vbs=cscript.exe //T:30 //NoLogo %SCRIPT% %ARGS%

[/settings/external scripts/wrapped scripts]
check_updates=scripts\check_updates.vbs

更多详情可在这找到:http://docs.nsclient.org/howto/external_scripts.html#wrapped-scripts

相关内容