Problème perl sur UBUNTU

Fermé
pianoclassique Messages postés 108 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 19 janvier 2009 - 11 juin 2008 à 10:46
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 14 juin 2008 à 10:48
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……………………………
A voir également:

8 réponses

pianoclassique Messages postés 108 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 19 janvier 2009 4
11 juin 2008 à 20:03
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.
0
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 569
11 juin 2008 à 20:09
Salut,

pourquoi ne continues sur ton premier message
la solution est là http://www.commentcamarche.net/forum/affich 6615550 comment je corrige ce script sous ubuntu#1
0
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 569
11 juin 2008 à 20:18
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é
0
pianoclassique Messages postés 108 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 19 janvier 2009 4
11 juin 2008 à 22:53
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..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pianoclassique Messages postés 108 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 19 janvier 2009 4
12 juin 2008 à 10:40
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..
0
pianoclassique Messages postés 108 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 19 janvier 2009 4
14 juin 2008 à 10:18
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.......
0
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 569
14 juin 2008 à 10:30
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
0
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 569
14 juin 2008 à 10:48
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

0