Я использую сценарии на основе Perl для проверки служб в Nagios и получаю (Service check did not exit properly)
и (null)
как результат в Nagios, но скрипт отлично работает в командной строке.
Я видел в Интернете решения, предлагающие отключить внутренний интерпретатор Perl, установив enable_embedded_perl=0
в конфигурации Nagios или явно указав путь к интерпретатору. Это не помогло с проблемой.
Что еще это может быть?
Nagios включает собственный встроенный интерпретатор Perl. Ваш плагин, вероятно, не совместим с epn.
Вы можете отключить его глобально или просто отключить для своего скрипта. Внизу страницы документации показано, как это сделать.
По сути, добавить # nagios: -epn
в отдельной строке где-то в первых десяти строках вашего скрипта. Это должно решить вашу проблему.
Вы также можете сделать это совместимым, но это почти наверняка того не стоит.
Некоторые сценарии Perl из Nagios Exchange попытаются включить utils.pm
Модуль Perl. Где-то в нем вы найдете такую строку:
use lib "/usr/local/nagios/libexec";
При установке Nagios в Debian расположение по умолчанию utils.pm
файл /usr/lib/nagios/plugins/utils.pm
. Так что use lib
директива должна быть:
use lib "/usr/lib/nagios/plugins";
Выполнение команды из командной строки, скорее всего, сработало, потому что вы были в /usr/lib/nagios/plugins/
, редактируя ваш плагин.
Добавьте к команде префикс /usr/bin/perl
.
Это решение - скорее обходной путь, вероятно, это не лучшая идея, но, по крайней мере, ваш плагин должен работать так же, как и при запуске его из терминала.
ПРИМЕЧАНИЕ: по моему опыту # nagios -epn
работает довольно часто, но иногда кажется, что этого недостаточно. Я заметил, что когда это происходит, неисправные плагины выдают множество предупреждений (когда скрипт вызывается с perl -w
).