Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1445 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] script utilisant les pipe unix, sql, et p'tet fork

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] script utilisant les pipe unix, sql, et p'tet fork

n°1463369
tifrere
Junos power
Posté le 23-10-2006 à 18:41:04  profilanswer
 

Bonjour à tous.
 
Ma question est plus algorithmique que pratique on va dire.
Ce n'est pas tant l'écriture du perl qui me bloque mais plutôt l'architecture du script.
 
Je vous pose le problème.
 
But du script
 
Un serveur reçoit un message syslog qui est stocké dans un pipe unix.
Je souhaiterais récupérer ce message et l'insérer dans une base de données.
Aujourd'hui je le fais sans soucis mais à chaque message reçu je fait une connexion BDD et une cloture de connexion ce qui me déplairait si je devais recevoir énormément de messages en très peu de temps.
J'ai un autre moyen ce serait d'ouvrir une connexion BDD au lancement du script et balancer les données dedans au fur et a mesure sans jamais fermer la connexion : le problème :  
- je ne sais pas au bout de combien de temps la connexion à la bdd time out et comme je peut très bien recevoir 50 messages en une minute, je peux très bien n'en recevoir aucun pendant plusieurs heures.
 
A savoir, la lecture du pipe unix est bloquant jusqu'a ce que quelque chose redirige du texte (dans mon cas) dans ce pipe.
 
Ce que je souhaite faire
 
Le top serait de lancer un compteur au début du script qui clos et re effectue la connexion à la bdd toutes les X minutes.
Et pendant ce laps de temps je peux faire toutes les requetes que je veux.
Je pensais forker le script pour que le processus bloquant ne joue pas sur le compteur de temps mais comment faire en sorte que le processus bloquant recoit les paramètres de connexion a la bdd lorsque celle ci est cloturée, relancée.
 
en gros je cherche a faire communiquer 2 processus pour que l'un recupère la variable lui permettant d'envoyer ces commandes sql dans la bonne connexion BDD.
 
Vous avez une soluce ?
 
PS : p'tet que fork n'est pas la meilleure solution mais il me viens que ca en tête

Message cité 1 fois
Message édité par tifrere le 23-10-2006 à 18:41:56
mood
Publicité
Posté le 23-10-2006 à 18:41:04  profilanswer
 

n°1468550
matafan
Posté le 01-11-2006 à 05:03:23  profilanswer
 

Pourquoi veux-tu que ca timeout ? Quand tu lances le shell de ta bdd, il reste, même si tu ne tapes rien pendant des années. C'est pareil à travers un pipe.

n°1468551
tbp
Posté le 01-11-2006 à 06:48:09  profilanswer
 

Solution: un cronjob qui tue le script toutes les x minutes.

n°1525540
neoraider
Posté le 07-03-2007 à 20:35:18  profilanswer
 

Si tu es sous Unix et CDE, tu devrais plutôt utiliser un script dtksh, avec la routine XtAddInput notamment, qui permet d'intercepter en temps réel tout ce qui passe par le pipe et en déclencher le traitement nécessaire, le tout cadencé par l'horloge X du système, sans effort ni blocage.
Voici le squelette d'un tel script, qui ne prend que quelques lignes :
 
-------------------------------
 
#!/usr/dt/bin/dtksh
 
function Traitement  {
 
  # Exemple
 
   read
 
   if [[ ${REPLY} ]]
   then
            print ${REPLY}  >> /tmp/logfile_$$
   else
            print "Pipe broken"  >> /tmp/logfile_$$
            exit 1
   fi
}
 
# Main
 
XtAddInput STDINPUT -r 0 Traitement
 
XtMainLoop
 
-----------------------------------------------
 
}

tifrere a écrit :

Bonjour à tous.
 
Ma question est plus algorithmique que pratique on va dire.
Ce n'est pas tant l'écriture du perl qui me bloque mais plutôt l'architecture du script.
 
Je vous pose le problème.
 
But du script
 
Un serveur reçoit un message syslog qui est stocké dans un pipe unix.
Je souhaiterais récupérer ce message et l'insérer dans une base de données.
Aujourd'hui je le fais sans soucis mais à chaque message reçu je fait une connexion BDD et une cloture de connexion ce qui me déplairait si je devais recevoir énormément de messages en très peu de temps.
J'ai un autre moyen ce serait d'ouvrir une connexion BDD au lancement du script et balancer les données dedans au fur et a mesure sans jamais fermer la connexion : le problème :  
- je ne sais pas au bout de combien de temps la connexion à la bdd time out et comme je peut très bien recevoir 50 messages en une minute, je peux très bien n'en recevoir aucun pendant plusieurs heures.
 
A savoir, la lecture du pipe unix est bloquant jusqu'a ce que quelque chose redirige du texte (dans mon cas) dans ce pipe.
 
Ce que je souhaite faire
 
Le top serait de lancer un compteur au début du script qui clos et re effectue la connexion à la bdd toutes les X minutes.
Et pendant ce laps de temps je peux faire toutes les requetes que je veux.
Je pensais forker le script pour que le processus bloquant ne joue pas sur le compteur de temps mais comment faire en sorte que le processus bloquant recoit les paramètres de connexion a la bdd lorsque celle ci est cloturée, relancée.
 
en gros je cherche a faire communiquer 2 processus pour que l'un recupère la variable lui permettant d'envoyer ces commandes sql dans la bonne connexion BDD.
 
Vous avez une soluce ?
 
PS : p'tet que fork n'est pas la meilleure solution mais il me viens que ca en tête



Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] script utilisant les pipe unix, sql, et p'tet fork

 

Sujets relatifs
arborescence en perlLes bases de la création d'un script en C
[Résolu][XHTML/Javascript/W3C] Problème de XHTML dans un Javascript[SCRIPT UNIX]Pb avec sed
script multi upload multi site[oracle] script affichant base connecté
fork(), wait(), exec() et autres sous Win?Script de connexion WSH
[Résolu][Script aculo us] Sortable.create 
Plus de sujets relatifs à : [Perl] script utilisant les pipe unix, sql, et p'tet fork


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR