Problème perl sur UBUNTU

Bonjour,
J’ai installé NAGIOS et MTRG sur UBUNTU, et je veux faire quelque traitement avec un script perl sur le fichier mrtg log ensuite je vais faire une relation avec NAGIOS et le mrtg log.
Voila ce script :
#!/usr/bin/perl
use strict;use warnings;
use Time::Local;

my $adr=$ARGV[0];
my $filename = '/var/www/mrtg/'.$adr.'.log';

my $file_is_open = open (FILE,$filename) ;#or die "$filename";
if(!$file_is_open)
{
print "Cant open file :".$filename."\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[4] > $ARGV[2]) {

print "val exist\n";

}else{

print "val n'est pas dans lintervl\n";
}
}
}

Ce script récupère le temps actuelle et prend ce temps pour le cherche dans fichier log de mrtg. Si ce temps existe, le programme retourne la valeur du 5ième champ de la ligne de ce fichier convenable à ce temps actuelle. Ce 5ième champs est comparer par deux arguments ARGV[1] et ARGV[2].
Par exemple :
J’ai le fichier log de cette façon :

1036567881 2313865839 3040227868
1036567881 937 713 937 713
1036567581 1561 229 1561 229
1036571100 1831 240 2561 273
1036567200 2473 643 2561 1647
1036566900 2312 1305 2513 1647
Le programme cherche dans le fichier le temps actuel s’il existe ou non.
On suppose que ce temps 1036567581 est le actuelle de cette instant le programme dans ce cas récupère le dernier champ 229.
Puis prend la valeur 229 et la compare par ARGV[1] et ARGV[2] si 229 est entre l’intervalle de ARGV[1] et ARGV[2] le programme affiche « C’est bon » sinon affiche « erreur ».
Mon problème et d’exécuter ce script de cette façon car ce script ne me retourne aucun résultat :
Perl script.pl localhost 200 100
Je veux que le programme me donne :
C’est bon.
Sinon le programme me donne :
Erreur.
Remarque :locahost c’est ARGV[0], 200 est le Max c’est ARGV[1] et 100 est le Min c’est le ARGV[2]

Merci……………………………
Configuration: Windows XP
Internet Explorer 6.0

8 réponses

  1. Modérateur
    une possibilité sera de ne pas utiliser les secondes dans ton localtime

    lami20j@debian:~/trash$ cat epoch2time.pl
    #!/usr/bin/perl
    use strict;use warnings;
    use Time::Local;
    
    
    my @t=(localtime)[1..5];
    my $test=timegm(undef,@t,undef,undef,undef);
    print $test,"\n";
    __END__

    le résultat
    lami20j@debian:~/trash$ date
    samedi 14 juin 2008, 10:45:00 (UTC+0200)
    lami20j@debian:~/trash$ perl epoch2time.pl
    1213440300
    lami20j@debian:~/trash$ perl epoch2time.pl
    1213440300
    lami20j@debian:~/trash$ perl epoch2time.pl
    1213440300
    lami20j@debian:~/trash$ date
    samedi 14 juin 2008, 10:45:15 (UTC+0200)
    lami20j@debian:~/trash$ date
    samedi 14 juin 2008, 10:45:16 (UTC+0200)
    lami20j@debian:~/trash$ date
    samedi 14 juin 2008, 10:45:17 (UTC+0200)
    lami20j@debian:~/trash$ date
    samedi 14 juin 2008, 10:45:20 (UTC+0200)
    lami20j@debian:~/trash$ date
    samedi 14 juin 2008, 10:45:25 (UTC+0200)
    lami20j@debian:~/trash$ perl epoch2time.pl
    1213440300
    lami20j@debian:~/trash$ perl epoch2time.pl
    1213440300
    lami20j@debian:~/trash$ date
    samedi 14 juin 2008, 10:45:53 (UTC+0200)
    lami20j@debian:~/trash$ perl epoch2time.pl
    1213440300
    lami20j@debian:~/trash$ date
    samedi 14 juin 2008, 10:46:00 (UTC+0200)
    lami20j@debian:~/trash$ perl epoch2time.pl
    1213440360
    lami20j@debian:~/trash$ perl epoch2time.pl
    1213440360
    lami20j@debian:~/trash$ date
    samedi 14 juin 2008, 10:46:15 (UTC+0200)
    lami20j@debian:~/trash$ perl epoch2time.pl
    1213440360

    1. Modérateur
      Salut,

      tu dois changer ton test
      my $test=timegm(localtime);

      j'explique

      disons qu'il fait 10:00:00
      une ligne est ajouté chaque 5 minutes
      à 11:00:00 tu auras 12 lignes
      si tu exécutes le script à 11:00:01 alors je te laisse voir que tu ne trouveras pas de correspondance

      donc le $test ne sera jamais égal à xxxxxxxxxx 2473 643 2561 1647

      tu dois chercher une heure passée et pas l'heure actuelle qui peut être après les premières 5 minutes et avant les premières 10 minutes
      1. Salut

        Le fichier mrtg log ajout chaque 5 minutes une nouvelle ligne qui contient une nouvelle temps.
        Par exemple chaque 5 minutes il ajoute une ligne de cette façon:

        1036567200 2473 643 2561 1647

        Comment je peux changer le script précédent pour obtenir une résultat.

        Merci.......
        1. Salut,

          le fichier mrtg log change chaque fois sa date pendant chaque 5 minutes.

          Donc comment je peux rècupérer chaque fois la nouvelle date du fichier mrtg log.

          Merci..
          1. Salut,

            Est ce que tu peux me donner un script qui récupère le dernière temps afficher sur le fichier log de MRTG.
            c à d que le programme faire le traitement sur chaque nouveau temps afficher sur la ligne de fichier log de mrtg(sur chaque nouveau temps le script faire le même traitement de script précédent.

            Merci..
            1. Modérateur
              C'est normal que tu n'as aucun résultat puisque la condition d'entrée est
              if ($line[0] == $test )

              et elle ne sera jamais vraie puisque tu fait un test sur la data actuelle et les dates de ton mrt.log qui sont déjà du passé
              1. Salut ,

                Je besoin de cette travail, c'est très intéressant pour moi. S’il y a quelqu’un pour m’aider ou me donne son opinion.

                Merci.