我有这个命令定义:
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,
您断言这个命令行上的“正常工作”是值得怀疑的。 当我手动运行它,它不会“正常工作”:
./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