Nagios不接受命令中的正则expression式

我有这个命令定义:

define command{ command_name check_http_sane command_line $USER1$/check_http -H $HOSTNAME$ -r "HTTP/1.1 (200|301|302|303|304|307|401|418|426)" } 

当我在命令行上手动运行它,它工作正常,但nagios(2.6)报告“找不到模式”错误。 我需要逃避什么吗?


编辑:如下所述,我通过用我自己的脚本replacecheck_http解决了这个问题(对我们的用例来说足够好)。 脚本: http : //pastebin.com/hNmz6Wa1

check_http.c的源代码表示-r选项检查标题和页面内容。 您看到的问题可能是Nagios命令macros解释器尝试replace正则expression式string中的某些内容。

您应该尝试转义所有( ,和)字符。 如果这不起作用,请尝试仅括号和pipe道。 您也可以尝试使用单引号而不是双引号。

既然逃跑也行不通(而且它没有在命令行工作,为什么),我不想花费更多的时间去debugging它,我写了自己的Nagios插件来取代check_http,

https://github.com/tao-software/nagios-plugin-http-tao

您断言这个命令行上的“正常工作”是值得怀疑的。 当我手动运行它,它不会“正常工作”:

./check_http -H localhost -r "HTTP/1.1 (200|301|302|303|304|307|401|418|426)" HTTP CRITICAL: HTTP/1.1 302 Found - pattern not found - 650 bytes in 0.001 second response time |time=0.001410s;;;0.000000 size=650B;;;0

正如Jeff Strunk所build议的那样,您需要转义括号(所以shell不会使用它们),如下所示:

./check_http -H localhost -r "HTTP/1.1 \(200|301|302|303|304|307|401|418|426\)" HTTP OK: HTTP/1.1 302 Found - 650 bytes in 0.001 second response time |time=0.001425s;;;0.000000 size=650B;;;0