Comment je corrige ce script sous ubuntu

Fermé
pianoclassique Messages postés 108 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 19 janvier 2009 - 28 mai 2008 à 12:21
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 28 mai 2008 à 14:04
Bonjour,

J’ai un petit travail sur le nagios et l’mrtg sous ubuntu, plus précisément sur le fichier log de mrtg.
Je veux écrire un script perl qui faire :
Récupère la date actuelle, et cherche cette date dans le fichier log de mrtg si existe ou nom, s’il existe le programme récupère le 5ème champ qui correspond a cette date et ligne de fichier log mrtg.
Aussi il y a une condition sur le 5ème champ pour qu’il ne faille pas passer une max et une min.
Je veux passer le fichier log de mrtg, max et min comme des arguments. Mon fichier log est sous le /var/www/mrtg/localhost_2.log qui est sous la forme :
1211624102 2042932 238472
1211624102 3429 516 3429 516
1211623801 2725 262 2725 262
1211623800 34389 32027 4752469 4765100
1211623500 4752469 4765100 4752469 4765100
1211623200 4752469 4765100 4752469 4765100
1211622900 4736629 4749216 4752469 4765100
1211622600 594 26 2534 294
1211622300 2560 297 10504 1216
1211622000 10439 1208 10504 1216
1211621700 843 96 845 97
1211621400 398 3 399 4
1211621100 346 3 468 4
1211620800 468 3 535 12
1211620500 534 11 535 12

Donc je veux corriger cette script pour qu’il devient exécutable de cette manière :
Perl script.pl localhost_2 200 150 // 200 est le max et 150 est la min
Voilà le script :

#!/usr/bin/perl
Use strict
use Time::Local;
#my @line;
my $adr=$ARGV[0]._2;
open ("file","/var/www/mrtg/$adr.log")|| die ("impossible d'accéder a mrtg.log\n");
my $test=timegm(localtime);
while ( $line = <file> ){
chomp ($line);
@line = split( / /, $line);
next unless defined $line[0];
if ($line[0] ==$test ){
if ($line[4]==0) {
return 0;
print STDOUT "erreur time\n";
}
elsif ($line[4] < $ARGV[1] && $line[2] > $ARGV[2])
{
return 1;
print STDOUT "val exist\n";
}
else{
print STDOUT "val n'est pas dans lintervl\n";
}
}
A voir également:

1 réponse

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 mai 2008 à 14:04
Salut,

voilà
#!/usr/bin/perl
use strict;use warnings;
use Time::Local;

my $adr=$ARGV[0];
open FILE,"/var/www/mrtg/$adr.log"
   or die "impossible d'accéder a mrtg.log\n";
my $test=timegm(localtime);
while ( my $l = <FILE> ){
  chomp ($l);
  my @line = split / /, $l;

  if ($line[0] == $test ){
    if ($line[4]==0) {
      print "erreur time\n";
    }elsif ($line[4] < $ARGV[1] && $line[2] > $ARGV[2]) {
      print "val exist\n";
    }else{
      print "val n'est pas dans lintervl\n";
    }
  }
}
__END__

Merci d'arrêter de poster partout le même message.
0