Strona 1 z 2
błąd przy wywołaniu skryptu perla
: 03 listopada 2009, 05:10
autor: Marek1980
Witam.
Chcę m.in za pomocą digitempa i rrdtoola uzyskiwać temperatury z czujnika ds18b20 i rysować wykresy na stronie www. Z digitempem nie miałem zbytnich problemów po wydaniu polecenia:
zwraca:
Kod: Zaznacz cały
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - [url]http://www.digitemp.com[/url]
Nov 03 04:51:42 Sensor 0 C: -2.50 F: 27.50
więc chyba dobrze?
Próbowałem różnych skryptów w perlu, ale zazwyczaj znajdowały się tam takie linie
Kod: Zaznacz cały
use lib qw(/usr/local/rrdtool-1.2.12/lib/perl);
a u mnie w katalogu /usr/local/ nic na r nie ma?
Lekko już zdesperowany znalazłem poradnik tylko, że dotyczył polecenia ,,ping'' (to też by się przydało),
http://ssi.dug.net.pl/dydaktyka/5_semes ... rdtool.pdf, stanąłem w
punkcie gdzie jest podany przykład skryptu perla i trzeba go wywołać. Zwraca mi coś takiego:
Kod: Zaznacz cały
-bash: ./myping.pl: /usr/bin/perl^M: bad interpreter: Nie ma takiego pliku ani katalogu
rrdtoola mam w wersji 1.3.1, zainstalowane odpowiednie biblioteki perla (chyba) m.in opisaną w tym poradniku ,,librrds-perl'' pracuję na wersji "debian-503-i386-xfce+lxde-CD-1".
Z góry dziękuję za pomoc.
: 03 listopada 2009, 09:49
autor: szpuni
Bardzo proste.
Musiałeś edytować ten plik w jakimś edytorze i w pierwszej
linii masz zły interpreter:
Kod: Zaznacz cały
-bash: ./myping.pl: /usr/bin/perl[b]^M[/b]: bad interpreter: Nie ma takiego pliku ani katalogu
Skasuj ,,^M'' i po krzyku.
Polecam edytor vim do edycji.
Jak chcesz grzebać w perlu to powinieneś przynajmniej podstawy rozumieć, ale nie sądzę żeby ci to ,,poro'' pomogło.
Perl jest fajny ale trudny do czytania.
Google ci pomoże w znalezieniu odpowiednich informacji.
A ta linia szuka twojego rrdtool w tym katalogu. Tu się kłaniają podstawy Linuksa.
: 03 listopada 2009, 17:13
autor: Marek1980
Niestety proste to nie jest, bynajmniej dla mnie.
plik myping.pl wygląda identycznie jak w poradniku z tą różnicą, że pinguje inny adres.
Kod: Zaznacz cały
#!/usr/bin/perl
$ping = `/usr/bin/fping -e 192.168.0.1`;
@tab = split(/\(/, $ping);;
@tab1 = split(/m/, $tab[1]);;
$ping = $tab1[0];
$ping=~s/\s//g;
print("$ping \n");
Specjalnie, żeby sprawdzić czy to wina systemu zainstalowałem na wirtualnej maszynie czystą instalkę + librrds-perl + rrdtool + fping i błąd ten sam...
: 03 listopada 2009, 17:43
autor: grapeli23
¦cieżka do fping jest poprawna?
: 03 listopada 2009, 17:58
autor: Marek1980
zmieniłem w skrypcie, ale błąd nadal ten sam.
: 03 listopada 2009, 19:23
autor: grapeli23
Ale jaki błąd?
Co się dzieje po
Masz odpowiednie prawa do uruchamiania pinga?
: 03 listopada 2009, 21:04
autor: Marek1980
Kod: Zaznacz cały
-bash: ./myping.pl: /usr/bin/perl^M: bad interpreter: Nie ma takiego pliku ani katalogu
taki błąd.
Po wpisaniu:
bezproblemowo zwraca:
Nie podoba mi się to ,,^M'' po perl.
: 03 listopada 2009, 21:17
autor: lessmian2
Marek1980 pisze:Nie podoba mi się to ^M po perl...
Bo tu jest problem, a nie w
fpingu. W jaki sposób stworzyłeś ten skrypt? Pisałeś bezpośrednio na Linuksie czy może skopiowałeś z Windowswa via FTP? Masz "nielinuksowy" koniec linii. Zainstaluj
tofrodos i przepuść skrypt przez
dos2unix
Sprawdź czy będzie lepiej.
: 03 listopada 2009, 23:16
autor: Marek1980
Pomogło. Teraz mam kolejny problem, stworzyłem plik ping.list, z zawartością podaną w poradniku w /root/, oraz PLIK_PING w katalogu domowym
Kod: Zaznacz cały
#!/usr/bin/perl
use RRDs;
open (PLIK_PING, "/root/ping.list") or die "open $alert_file:
$!\n";
{
sleep 1;
if (seek(PLIK_PING,0,1))
{
while (<PLIK_PING>)
{
chop;
next if (/^\s*$/); # wyjazd z pustymi liniami
next if (/^#/); # wyjazd z #
if (/(\d+\.\d+\.\d+\.\d+) \; (\S+)/)
{
$ip = $1;
$opis = $2;
$ping = `/usr/bin/fping -e $ip`;
@tab = split(/\(/, $ping);;
@tab1 = split(/m/, $tab[1]);;
$ping = $tab1[0];
$ping=~s/\s//g;
if (!-e "/root/pingdb/$ip.rrd")
{
RRDs::create ("/root/pingdb/$ip.rrd",
"-s 120",
"DS :p ing:GAUGE:720:0:U",
"RRA:AVERAGE:0.5:1:720",
"RRA:MAX:0.5:1:5",
"RRA:LAST:0.5:1:600"
);
}
RRDs::update ( "/root/pingdb/$ip.rrd","N:$ping");
RRDs::graph ("/var/www/ping/$ip.gif",
"-w 700",
"-h 200",
"--title=Ping do $ip - $opis",
"DEF :p ing=/root/pingdb/$ip.rrd :p ing:AVERAGE",
"COMMENT: Maksymalnie Srednio Minimalnie Aktualnie \\n",
"GPRINT :p ing:MAX:%7.2lf%sms",
"GPRINT :p ing:AVERAGE:%7.2lf%smd",
"GPRINT :p ing:MIN:%7.2lf%smd",
"GPRINT :p ing:LAST:%7.2lf%sms",
"AREA :p ing#FF0000:Poziom ping'a w ms \\n"
);
}
} # end if (/(\d+)/)
} # end while
} # end seek
} # end open
close PLIK_PING;
po wywołaniu go wyskakuje
Kod: Zaznacz cały
Unmatched right curly bracket at ./PLIK_PING line 50, at end of line
syntax error at ./PLIK_PING line 50, near "}"
Execution of ./PLIK_PING aborted due to compilation errors.
, wychodzi, że błąd jest w 50 lini, ale niestety nie wiem jaki.
: 04 listopada 2009, 00:20
autor: grapeli23
Bład mówi tyle. Masz niesparowaną klamrę '}'. Nie ma klamry otwierającej. Do edycji takiego kodu dobrze jest używać edytora, który takie błędy wychwyci. Na przykład Vim to potrafi. Oczywiście również w ładny sposób pokaże WIN/DOS-owy koniec linii '^M'.
vim wiki