Модуль на Perl для Nagios, vagner, 13-Май-09, 09:19 [смотреть все]Добрый день! Прошу помощи в проверке написанного скрипта... Сам не могу разобраться в чем проблема:( В перле я новичек, поэтому некоторые куски брал из инета... Суть ошибки: serverbsd# ./check_cpu syntax error at ..../nagios/check_cpu line 7, near "= ;" Excution of ..../nagios/check_cpu aborted due to compilation errors.Собственно исходный код: serverbsd# cat ..../nagios/check_cpu #! /usr/bin/perl -w use strict; my $file = '/var/mbmon-nagios'; my $line; open FD, $file; ######################### # Строка в которой ошибка ######################### $line = ; close FD; my ($TEMP_proc1, $TEMP_proc2, $FAN_speed_proc1, $FAN_speed_proc2, $nagios_data, $nagios_status, $exit_code); my @arg; @arg = split(/;/, $line); $arg[0] =~ /^TEMPproc1:(.*)$/; $TEMP_proc1 = $1; $arg[1] =~ /^TEMPproc2:(.*)$/; $TEMP_proc2 = $1; $arg[2] =~ /^FANspeed_proc1:(.*)$/; $FAN_speed_proc1 = $1; $arg[3] =~ /^FANspeed_proc2:(.*)$/; $nagios_data = sprintf("|TEMP_proc1=%f;;; TEMP_proc2=%f;;; FAN_speed_proc1=%f;;; FAN_speed_proc2=%f;;;",$TEMP_proc1,$TEMP_proc2,$FAN_speed_proc1,$FAN_speed_proc2); if ( $TEMP_proc1 == 0 ) { $nagios_status = "CPU status: CRITICAL, temp_proc1 $TEMP_proc1 %"; $exit_code = 2; } elsif ( $TEMP_proc1 < 5 ) { $nagios_status = "CPU status: WARNING, temp_proc1 $TEMP_proc1 %"; $exit_code = 1; } else { $nagios_status = "CPU status: OK, temp_proc1 $TEMP_proc1 %"; $exit_code = 0; } print $nagios_status . $nagios_data; exit $exit_code; И вспомогательный файл откуда берутся данные: serverbsd# cat /var/mbmon-nagios TEMP_proc1:33.0;TEMP_proc2:34.0;FAN_speed_proc1:1670;FAN_speed_proc2:1962 Буду премного благодарен за помощь!
|
- Модуль на Perl для Nagios, phpcoder, 09:22 , 13-Май-09 (1)
>syntax error at ..../nagios/check_cpu line 7, near "= ;" [skip] >$line = ; Что не понятно? Нужно переменной присвоить значение, а вы ничего не присваивате. В зависимости от контекста нужно присвоить 0 или пустую строку, например.
- Модуль на Perl для Nagios, vagner, 09:33 , 13-Май-09 (2)
>>syntax error at ..../nagios/check_cpu line 7, near "= ;" > >[skip] >>$line = ; > >Что не понятно? Нужно переменной присвоить значение, а вы ничего не присваивате. >В зависимости от контекста нужно присвоить 0 или пустую строку, например. >Насколько я понимаю - у меня в файле с которого берутся данные постоянно первая строка... Но при значении $line = ""; или $line = 0; и прочих вариантах у меня вывыливается куча ошибок: serverbsd# ..../nagios/check_cpu Use of uninitialized value in pattern match (m//) at ..../nagios/check_cpu line 16 Use of uninitialized value in pattern match (m//) at ..../nagios/check_cpu line 18 Use of uninitialized value in pattern match (m//) at ..../nagios/check_cpu line 20 Use of uninitialized value in sprintf at ..../nagios/check_cpu line 22 Use of uninitialized value in sprintf at ..../nagios/check_cpu line 22 Use of uninitialized value in sprintf at ..../nagios/check_cpu line 22 Use of uninitialized value in sprintf at ..../nagios/check_cpu line 22 Use of uninitialized value in numeric eq (==) at ..../nagios/check_cpu line 23 Use of uninitialized value in concatenation (.) or string at ..../nagios/check_cpu line 24 CPU status: CRITICAL, temp_proc1 %|TEMP_proc1=0.000000;;; TEMP_proc2=0.000000;;; FAN_speed_proc1=0.000000;;; FAN_cpeed_proc2=0.000000;;; Я просто в замешательстве:((
- Модуль на Perl для Nagios, phpcoder, 09:38 , 13-Май-09 (3)
>Насколько я понимаю - у меня в файле с которого берутся данные >постоянно первая строка... Но при значении $line = ""; или $line >= 0; и прочих вариантах у меня вывыливается куча ошибок: Если line это строка, то логичнее было бы ей присвоить пустую строку по умолчанию. Остальные ошибки это уже _другие_ ошибки, которые у вас встречаются ниже в скрипте, так что вашей следующей задачей является исправть их. В частности большая часть проблем из-за неинциализированных переменных. Причем исправив это (инициализировав их) часть следующих предупреждений просто исчезнет.
- Модуль на Perl для Nagios, vagner, 09:57 , 13-Май-09 (4)
>[оверквотинг удален] >>постоянно первая строка... Но при значении $line = ""; или $line >>= 0; и прочих вариантах у меня вывыливается куча ошибок: > >Если line это строка, то логичнее было бы ей присвоить пустую строку >по умолчанию. > >Остальные ошибки это уже _другие_ ошибки, которые у вас встречаются ниже в >скрипте, так что вашей следующей задачей является исправть их. В частности >большая часть проблем из-за неинциализированных переменных. Причем исправив это (инициализировав их) >часть следующих предупреждений просто исчезнет. Простоте за темность, я как понимаю ошибка первая мне говорит тогда о том, что переменная $arg[1] не инициализированна, но я выше ее вроде как инициализировал такими строками: my @arg; @arg = split(/;/, $line); Подскажите плиз где я включаю тормоз:(((
- Модуль на Perl для Nagios, angra, 10:13 , 13-Май-09 (6)
И чем же вы ее инициализировали? arg[0] у вас инициализировался пустой строкой из $line, а вот на заполнение всех остальных элементов массива осталась только путоста. А если пустоту разбить(split) на несколько кусочков, то в каждом из них окажется, кто бы мог подумать, пустота.
- Модуль на Perl для Nagios, vagner, 12:43 , 13-Май-09 (9)
>И чем же вы ее инициализировали? arg[0] у вас инициализировался пустой строкой >из $line, а вот на заполнение всех остальных элементов массива осталась >только путоста. А если пустоту разбить(split) на несколько кусочков, то в >каждом из них окажется, кто бы мог подумать, пустота. Огромное спасибо!!! Оказалось я там намудрил еще и в тех строках:-[ Я в перле еще полный ноль( Все заработало:) Но если не сложно? расскажите пожалуйста что значит <FD> - оч интересно понять:-[
- Модуль на Perl для Nagios, angra, 16:31 , 16-Май-09 (10)
open FD, $file; #открыли файл, связав с ним file handler FD $line =<FD> ; #прочитали из файла _одну_ строку в $line close FD; #закрыли файлperl довольно простой язык, по нему есть отличные книги и с ним идет хорошая дока. Что вам мешает этим воспользоваться? Например perldoc -f open выдал бы вам описание open и кучу примеров использования
- Модуль на Perl для Nagios, angra, 10:09 , 13-Май-09 (5) +1
Вы бы хоть сказали, что получить хотите ибо скрипт набор почти бессмысленных действий и умещается в однострочник. Исправление вашей проблемной строки: $line = <FD>;P.S. Честное слово любопытно увидеть процессоры для которых критичным является охлаждение, а не нагрев. Вы часом не из параллельной вселенной? :)
- Модуль на Perl для Nagios, vagner, 12:34 , 13-Май-09 (8)
>Вы бы хоть сказали, что получить хотите ибо скрипт набор почти бессмысленных >действий и умещается в однострочник. >Исправление вашей проблемной строки: >$line = <FD>; > >P.S. Честное слово любопытно увидеть процессоры для которых критичным является охлаждение, а >не нагрев. Вы часом не из параллельной вселенной? :) Я хотел получить полноценный вывод типа: Status ok и данные по переменным:-[ А вы не могли бы помочь разобраться в том что означает $line = <FD>; Оно избавило от части ошибок - но ошибки про переменные в строке с sprintf остались((
- Модуль на Perl для Nagios, Pahanivo, 11:01 , 13-Май-09 (7)
уже синтакс еррор в скрипте из 10 строк найти не можем пипл сильно деградирует (((
|