Я хочу вызвать команду непосредственно из служебного файла Nagios, вместо того, чтобы неуклюже передавать аргументы в commands.cfg. Например, я хочу сделать это:
define service {
service_description footest
check_command $USER1$/check_http example.com -u http://example.com/index.html
use generic-service
host_name example
}
Но я получаю:
Error: Service check command '/usr/share/nagios/libexec/check_http example.com -u http://example.com/index.html' specified in service 'footest' for host 'example' not defined anywhere!
Если вы абсолютно настаиваете на этом, а это действительно ужасная идея, этот фрагмент должен работай:
define command {
command_name check_by_arbitrary_path
check_command /bin/sh -c "$ARG1$"
}
define service {
use remote-service
host_name example
service_description This is a bad idea, seriously
check_command check_by_arbitrary_path!$USER1$/check_http example.com -u http://example.com/index.html
}
Если серьезно, пожалуйста, не надо.
Я добился успеха с определением команды check_any в commands.cfg
define command {
command_name check_any
command_line $USER1$/check_$ARG1$
}
Что я использую в таком определении:
define service {
service_description Forest is not on fire
check_command check_any!forest --on-fire=false
use generic-service
host_name example
}
Вам нужно разбить его на две части: первая - это check_command, а вторая - сама проверка.
Создайте шаблон для проверки URL:
define command {
command_name check_http_url
command_line $USER1$/check_http -I'$HOSTADDRESS$' -u '$ARG1$'
}
Используйте шаблон, чтобы проверить конкретный URL (в данном случае www.example.com):
define service {
host_name example
service_description Check www.example.com URL
check_command check_http_url!www.example.com
use generic-service
}
Лучшая практика Nagios - разделить вашу проверку на команду и проверить, check_command определяется как команда типа
define command {
command_name footest
command_line $USER1$/footest -a some-fixed-option -b $ARG1$ -c $ARG2$
}
прежде, чем его следует использовать при сервисной проверке.