Aide sur mon script perl
Résolu/Fermé
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
-
11 janv. 2008 à 10:11
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 - 29 janv. 2008 à 14:00
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 - 29 janv. 2008 à 14:00
A voir également:
- Aide sur mon script perl
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Script bat - Guide
- Denon perl pro test - Accueil - Audio
- Microsoft activation script - Accueil - Windows
51 réponses
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 janv. 2008 à 12:07
11 janv. 2008 à 12:07
Salut,
1. oui il manque
2. utliser sed quand tu as la puissance des regex de Perl, c'est vraiment superflu
3. je vais regarder ce soir,
ce que j'ai besoin c'est d'avoir une sortie de la commande
on pourra stocker le résultat dans une chaîne ou dans un fichier texte
1. oui il manque
2. utliser sed quand tu as la puissance des regex de Perl, c'est vraiment superflu
3. je vais regarder ce soir,
ce que j'ai besoin c'est d'avoir une sortie de la commande
on pourra stocker le résultat dans une chaîne ou dans un fichier texte
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
17
11 janv. 2008 à 14:04
11 janv. 2008 à 14:04
Voici le ce qui ce passe quand je fait un pepquota -v (exemple de fichier) :
ensuite voici ce qui ce passe quand je fait : sed -e '1,/-\+/d;/^$/,$d' rep //rep = fichier
L'objectif de mon code (que je metterai en cron plus tard ) est de nourrir une base de donnée distante ( donc de lui donnée toute les infos de repquota) Il faut que je mette toute ces donnée en variable puis je les balance a la table distante . Une fois que tout cela sera terminé je ferai un script php qui donnera dans une sorte d'intranet les quotas disque utilisé puis ... .
Voila a tu compris mon objectif ?
Maintenant il est vrai j'ai quelque soucis dans mon code mais en tant que debutatn et surtout premier script voila je demande de l'aide en tout cas merci a toi
Sinon voici se qu'une autre personne ma conseillé quand pense tu ?
Il ma mis en commentaire les lignes d'origine
Code :
Voiloilou!!!!
eport for user quotas on device /dev/mapper/data-sitcar Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 157696 0 0 12 0 0 uucp -- 40 0 0 76 0 0 fradin -- 2304352 2500000 2550000 12465 50000 55000 Statistics: Total blocks: 7 Data blocks: 1 Entries: 3 Used average: 3.000000
ensuite voici ce qui ce passe quand je fait : sed -e '1,/-\+/d;/^$/,$d' rep //rep = fichier
root -- 157696 0 0 12 0 0 uucp -- 40 0 0 76 0 0 fradin -- 2304352 2500000 2550000 12465 50000 55000
L'objectif de mon code (que je metterai en cron plus tard ) est de nourrir une base de donnée distante ( donc de lui donnée toute les infos de repquota) Il faut que je mette toute ces donnée en variable puis je les balance a la table distante . Une fois que tout cela sera terminé je ferai un script php qui donnera dans une sorte d'intranet les quotas disque utilisé puis ... .
Voila a tu compris mon objectif ?
Maintenant il est vrai j'ai quelque soucis dans mon code mais en tant que debutatn et surtout premier script voila je demande de l'aide en tout cas merci a toi
Sinon voici se qu'une autre personne ma conseillé quand pense tu ?
Il ma mis en commentaire les lignes d'origine
Code :
#!/usr/bin/perl -w use strict; use DBI; use CGI; my $cgi = new CGI; #my $recup = ` sed -e '1,/-\+/d;/^$/,$d' repquota -v/chemin` my @recup = ` sed -e '1,/-\+/d;/^$/,$d' repquota -v/chemin`; chomp(@recup); my ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2); print "Content-type: text/html\n\n"; #Connection à la base de données mysql avec le module dbd::mysql (conncetion à distance) $dbh = DBI->connect("DBI:mysql:database=$db;host=$host", $user, $password, {RaiseError => 1}); #Requete sur la base de donnée my $query = sprintf("INSERT INTO foo VALUES (%d, %s)", $number, $dbh->quote("name")); $dbh->do($query); #while ($ligne = $recup){ foreach($ligne(@recup)) { # récupération des éléments # ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2) = split /;/,$ligne; ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2) = split / +/,$ligne; # et on insere dans la base $db->do("insert into client values ('$user1','$used1','$soft1','$hard1','$grace1','$used2','$soft2','$hard2','$grace2')" ); or die "pb de requete : $DBI::errstr";
Voiloilou!!!!
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
17
15 janv. 2008 à 09:42
15 janv. 2008 à 09:42
up
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
15 janv. 2008 à 09:51
15 janv. 2008 à 09:51
Effectivement ca boucle, mais non pas indéfiniement, mais infiniement ;)
Quand tu fais ceci :
Il n'y a pas de condition d'arrêt puisque $ligne = $recup n'est pas une condition, mais une attribution.
Dans ce type de cas, généralement on fais un truc du genre :
Affectation + test en même temps.
Regarde si tu ne peux pas faire un truc du même genre (condition sur la nullité de ta ligne)
Quand tu fais ceci :
while ($ligne = $recup){
Il n'y a pas de condition d'arrêt puisque $ligne = $recup n'est pas une condition, mais une attribution.
Dans ce type de cas, généralement on fais un truc du genre :
while ( ($ligne = $recup) != null ){ // --- code }
Affectation + test en même temps.
Regarde si tu ne peux pas faire un truc du même genre (condition sur la nullité de ta ligne)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
15 janv. 2008 à 09:57
15 janv. 2008 à 09:57
Salut,
pas testé
à savoir que si un champ est vide tu auras de problèmes
vaut mieux utiliser le module Quota, qui met un zéro pour le champ vide
l'inconvenient c'est qu'il faut exécuter un getpwent mets il n'y a pas vraiment de perte de performances
pas testé
à savoir que si un champ est vide tu auras de problèmes
vaut mieux utiliser le module Quota, qui met un zéro pour le champ vide
l'inconvenient c'est qu'il faut exécuter un getpwent mets il n'y a pas vraiment de perte de performances
#!/usr/bin/perl use strict;use warnings; use DBI; use CGI; use Quota; my $cgi = new CGI; print "Content-type: text/html\n\n"; #Connection à la base de données mysql avec le module dbd::mysql (conncetion à distance) $dbh = DBI->connect("DBI:mysql:database=$db;host=$host", $user, $password, {RaiseError => 1}); #Requete sur la base de donnée my $query = sprintf("INSERT INTO foo VALUES (%d, %s)", $number, $dbh->quote("name")); $dbh->do($query); my $dev = Quota::getdev('/home'); # à modifier avec ton chemin while(my ($nom,$uid) = (getpwent())[0,2]){ my @tmp = Quota::query($dev,$uid); if (eval(join '+',@tmp) > 0){ my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) = map { $dbh->quote($_) } @tmp; print "$nom : $u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2\n"; # seulement pour test $db->do("insert into client values ($nom,$u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2)"); or die "pb de requete : $DBI::errstr"; } }je vais tester plus tard, mais normalement ça doit fonctionner
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
17
15 janv. 2008 à 10:59
15 janv. 2008 à 10:59
Oki , je le testerai aussi en tout cas merci pour les commentaires de tout le monde
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
15 janv. 2008 à 11:38
15 janv. 2008 à 11:38
Re,
il y a quelques erreurs dans le script, je ne me suis penché que sur l'histoire d'obtenir les quotas
j'ai crée une base avec une table de 10 champs
id,utilisateur,u1,s1,h1,g1,u2,s2,h2,g2
ensuite j'ai fait ce test et ça marche
à toi d'adapter
quand tu fait insert il faut spécifier les champs
donc le script que je te donne, fonctionne, je l'ai testé
j'ai mis des variables, qui te permettra de changer seulement la valeur
lami20j
il y a quelques erreurs dans le script, je ne me suis penché que sur l'histoire d'obtenir les quotas
j'ai crée une base avec une table de 10 champs
id,utilisateur,u1,s1,h1,g1,u2,s2,h2,g2
ensuite j'ai fait ce test et ça marche
à toi d'adapter
quand tu fait insert il faut spécifier les champs
donc le script que je te donne, fonctionne, je l'ai testé
j'ai mis des variables, qui te permettra de changer seulement la valeur
#!/usr/bin/perl use strict;use warnings; use DBI; use Quota; my $base = 'aaa'; my $host = 'localhost'; my $user = 'root'; my $pass = 'aaaaaaaa'; my $mysql_sock = '/var/run/mysqld/mysqld.sock'; #Connection à base de donnée mysql my $db = DBI->connect("DBI:mysql:database=$base;host=$host;mysql_socket=$mysql_sock", $user, $pass, {RaiseError => 1}); my $dev = Quota::getdev('/'); # à modifier avec ton chemin while(my ($nom,$uid) = (getpwent())[0,2]){ my @tmp = Quota::query($dev,$uid); if (eval(join '+',@tmp) > 0){ my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) = map {$db->quote($_)} @tmp; my $nom_ = $db->quote($nom); $db->do("INSERT INTO quota (utilisateur,u1,s1,h1,g1,u2,s2,h2,g2) VALUES ( $nom_, $u1, $s1, $h1, $g1, $u2, $s2, $h2, $g2) ") or die "pb de requete : $DBI::errstr"; } } __END__--
lami20j
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
17
15 janv. 2008 à 11:40
15 janv. 2008 à 11:40
je vais tester cela par contre quota c'est un module ? cpan ?
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
15 janv. 2008 à 11:43
15 janv. 2008 à 11:43
oui tu peux chercher sur cpan
sur mon debian je l'ai installer avec aptitude install libquota-perl
peut être que tu l'as aussi sur ta distribution.
Voici pour une meilleur visibilité
sur mon debian je l'ai installer avec aptitude install libquota-perl
peut être que tu l'as aussi sur ta distribution.
Voici pour une meilleur visibilité
#!/usr/bin/perl use strict;use warnings; use DBI; use Quota; my $base = 'aaa'; my $host = 'localhost'; my $user = 'root'; my $pass = 'aaaaaaaa'; my $mysql_sock = '/var/run/mysqld/mysqld.sock'; #Connection à la base de données my $db = DBI->connect("DBI:mysql:database=$base; host=$host; mysql_socket=$mysql_sock", $user, $pass, {RaiseError => 1} ); my $dev = Quota::getdev('/'); # à modifier avec ton chemin while(my ($nom,$uid) = (getpwent())[0,2]){ my @tmp = Quota::query($dev,$uid); if (eval(join '+',@tmp) > 0){ my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) = map {$db->quote($_)} @tmp; my $nom_ = $db->quote($nom); # insertion dans la base de données $db->do("INSERT INTO quota (utilisateur,u1,s1,h1,g1,u2,s2,h2,g2) VALUES ( $nom_, $u1, $s1, $h1, $g1, $u2, $s2, $h2, $g2) ") or die "pb de requete : $DBI::errstr"; } } __END__
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
17
15 janv. 2008 à 11:51
15 janv. 2008 à 11:51
#!/usr/bin/perl use strict;use warnings; use DBI; use Quota; my $base = 'aaa'; my $host = 'localhost'; my $user = 'root'; my $pass = 'aaaaaaaa'; my $mysql_sock = '/var/run/mysqld/mysqld.sock'; #Connection à la base de données my $db = DBI->connect("DBI:mysql:database=$base; host=$host; mysql_socket=$mysql_sock", $user, $pass, {RaiseError => 1} );
Cette partie oki
my $dev = Quota::getdev('/'); # à modifier avec ton chemin
La je ne voit pas trop c'est pour le chemin de koi
# la c'est pour ... while(my ($nom,$uid) = (getpwent())[0,2]){ my @tmp = Quota::query($dev,$uid); if (eval(join '+',@tmp) > 0){ my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) = map {$db->quote($_)} @tmp; my $nom_ = $db->quote($nom); # insertion dans la base de données ok $db->do("INSERT INTO quota ok (utilisateur,u1,s1,h1,g1,u2,s2,h2,g2) VALUES ( ok $nom_, ok $u1, ok $s1, ok $h1, ok $g1, ok $u2, ok $s2, ok $h2, ok $g2) ok ") ok or die "pb de requete : $DBI::errstr"; ok } ok } ok __END__ ok
je test merci
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
15 janv. 2008 à 12:03
15 janv. 2008 à 12:03
my $dev = Quota::getdev('/'); # à modifier avec ton chemin
La je ne voit pas trop c'est pour le chemin de koi
le chemin que tu utilisais pour repquota ;-))))
moi j'ai fait le test pour la racine
tu veux peut être tester un autre chemin
/home
je ne sais pas
regarde dans /etc/mtab les partition monté avec l'option de quota disque
La je ne voit pas trop c'est pour le chemin de koi
le chemin que tu utilisais pour repquota ;-))))
moi j'ai fait le test pour la racine
tu veux peut être tester un autre chemin
/home
je ne sais pas
regarde dans /etc/mtab les partition monté avec l'option de quota disque
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
17
15 janv. 2008 à 12:05
15 janv. 2008 à 12:05
mon chemin se situe pour moi dans /home/export/nomdel'entrerpise
Sa doit etre bon je pense la je suis entrai nde lutter pour trouver le module quota : je suis avec une fedora core 7
Sa doit etre bon je pense la je suis entrai nde lutter pour trouver le module quota : je suis avec une fedora core 7
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
15 janv. 2008 à 12:09
15 janv. 2008 à 12:09
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
15 janv. 2008 à 12:10
15 janv. 2008 à 12:10
je suis avec une fedora core 7
et tu ne peux pas changer??
t'es sur ovh par hasart?!
et tu ne peux pas changer??
t'es sur ovh par hasart?!
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
17
15 janv. 2008 à 12:18
15 janv. 2008 à 12:18
J'ai installé le module esce que toi aussi tu a eu pour l'install a mettre le chemin l'iud .....
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
17
15 janv. 2008 à 12:20
15 janv. 2008 à 12:20
OVH c'est une entrerpise de domaine ?
Moi je suis null par je suis en local reseau d'entreprise
regarde pour mon install : il me fait sa :
Moi je suis null par je suis en local reseau d'entreprise
regarde pour mon install : il me fait sa :
make test PERL_DL_NONLAZY=1 /usr/bin/perl "-Iblib/lib" "-Iblib/arch" test.pl Enter path to get quota for (NFS possible; default '.'):
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
15 janv. 2008 à 12:31
15 janv. 2008 à 12:31
tu laisses par défaut
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
15 janv. 2008 à 12:34
15 janv. 2008 à 12:34
Une fois que tu l'as installé tu peux taper cette commande pour voir si tout va bien ;-)
lami20j
perl -MQuota -e 'print "$Quota::VERSION\n"'--
lami20j
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
17
15 janv. 2008 à 13:40
15 janv. 2008 à 13:40
oki je vais mettre en place une maquette cette aprem-midi
je te redis pour la suite des evenement mais apriori sa devrai tres bien marcher
je te redis pour la suite des evenement mais apriori sa devrai tres bien marcher
specimen35
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
17
15 janv. 2008 à 17:55
15 janv. 2008 à 17:55
Bon resultat de la maquette :
1 . J'ai eu pas mal de soucis pour lancé le service httpd mais bon enfin de compte sa la fait
2. une fois lancé forcement il y avait un soucis avec allow from all
3. puis j'ai crée ma table en fonction de toi dit moi si j'ai fait une erreur
table quota :
utilisateur
u1
s1 h1
g1
u2
s2 h2
g2
cela est ma table quota ( normalement comme la tienne )
ensuite je fait les modife sur mon script
dit moi si je me trompe puis je lance mon script et sa me fait
quand pense tu ?
1 . J'ai eu pas mal de soucis pour lancé le service httpd mais bon enfin de compte sa la fait
2. une fois lancé forcement il y avait un soucis avec allow from all
3. puis j'ai crée ma table en fonction de toi dit moi si j'ai fait une erreur
table quota :
utilisateur
u1
s1 h1
g1
u2
s2 h2
g2
cela est ma table quota ( normalement comme la tienne )
ensuite je fait les modife sur mon script
#!/usr/bin/perl use strict;use warnings; use DBI; use Quota; my $base = 'test'; my $host = '10.27.0.51'; my $user = 'user'; my $pass = ''; my $mysql_sock = '/var/run/mysqld/mysqld.sock'; #Connection à la base de données my $db = DBI->connect("DBI:mysql:database=$base; host=$host; mysql_socket=$mysql_sock", $user, $pass, {RaiseError => 1} ); my $dev = Quota::getdev('/'); # à modifier avec ton chemin while(my ($nom,$uid) = (getpwent())[0,2]){ my @tmp = Quota::query($dev,$uid); if (eval(join '+',@tmp) > 0){ my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) = map {$db->quote($_)} @tmp; my $nom_ = $db->quote($nom); # insertion dans la base de données $db->do("INSERT INTO quota (utilisateur,u1,s1,h1,g1,u2,s2,h2,g2) VALUES ( $nom_, $u1, $s1, $h1, $g1, $u2, $s2, $h2, $g2) ") or die "pb de requete : $DBI::errstr"; } } __END__ ~ ~ ~ ~
dit moi si je me trompe puis je lance mon script et sa me fait
Use of uninitialized value in numeric gt (>) at ./gregpython.pl line 26.
quand pense tu ?