script utilisant les pipe unix, sql, et p'tet fork [Perl] - Perl - Programmation
Marsh Posté le 01-11-2006 à 05:03:23
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.
Marsh Posté le 01-11-2006 à 06:48:09
Solution: un cronjob qui tue le script toutes les x minutes.
Marsh Posté le 07-03-2007 à 20:35:18
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. |
Marsh Posté le 23-10-2006 à 18:41:04
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 édité par tifrere le 23-10-2006 à 18:41:56