Problème perl sur UBUNTU
pianoclassique
Messages postés
108
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
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……………………………
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:
- Problème perl sur UBUNTU
- Ubuntu 32 bits - Télécharger - Systèmes d'exploitation
- Ubuntu portable - Télécharger - Systèmes d'exploitation
- Linux mint ou ubuntu - Guide
- Ubuntu 24.04 - Accueil - Ubuntu
- Ubuntu download - Télécharger - Systèmes d'exploitation
8 réponses
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.
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.
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
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
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é
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é
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..
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..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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..
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..
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.......
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.......
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
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
une possibilité sera de ne pas utiliser les secondes dans ton localtime
le résultat
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