Я определил эту команду:
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) сообщает об ошибке «шаблон не найден». Мне нужно от чего-то бежать?
Редактировать: Как указано ниже, я решил это, заменив check_http
с моим собственным скриптом, который работает (во всяком случае, достаточно хорошо для нашего случая использования). Сценарий: http://pastebin.com/hNmz6Wa1
В исходном коде check_http.c говорится, что -r
опция проверяет заголовки и содержимое страницы. Проблема, которую вы видите, вероятно, заключается в том, что интерпретатор командного макроса Nagios пытается заменить что-то в вашей строке регулярного выражения.
Вы должны попытаться убежать от всех своих (
,|
и )
персонажи. Если это не сработает, попробуйте использовать только круглые скобки и только трубы. Вы также можете попробовать использовать одинарные кавычки вместо двойных кавычек.
Поскольку побег тоже не сработал (и делает почему бы не работать без командной строки), и я не хотел тратить больше времени на его отладку, я написал свой собственный плагин 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
Как предлагает Джефф Странк, вам нужно избегать скобок (чтобы оболочка их не использовала), например:
./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