Bonjour,
J'ai un programme - un scipt awk - qui lit l'entré standard ligne à ligne et qui produit une ligne de résultat par ligne.
$ echo "input" | monscript
output
Avant de pouvoir traiter la première ligne, le programme doit construire une structure de données à partir d'un fichier volumineux.
Cette construction prend environ 5s, contre qques ms ensuite pour le traitement d'une ligne, une recherche dichotomique dans la structure de données.
Ma problématique est la suivante: je voudrais transformer ce script en un service persistant tournant sur ma machine. Je pensais utiliser un pipe, voire une socket unix voire ip.
$ as_a_service monscript moyen_de_communication &
$ echo "input" | moyen_de_communication
output
J'ai fait quelques tests avec socat, sensé être magique, mais je n'ai pas pu aller au delà des exemples qui sont donnés et qui imposent de relancer le processus à chaque appel (option fork), ce qui ne solutionne pas mon problème. J'ai aussi essayé l'option "ingonreeof" mais cela ne fonctionne pas. Suis je sur une bonne piste ?
Merci de vos lumières
# (x)inetd pour socket IP ?
Posté par totof2000 . Évalué à 2.
Le principe des programmes (x)inetd est d'attendre les inputs sur l'entrée standard, et de fournir la sortie sur la sortie standard.
[^] # Re: (x)inetd pour socket IP ?
Posté par steph1978 . Évalué à 2.
est ce que cela fork des processus à chaque requête ?
c'est cela qui me gênerai.
sinon je crois que cela nécessite de passer par root, mais je peux m'en accommoder.
# mkfifo + tail -f ?
Posté par bernie . Évalué à 3.
Cela pourrait peut-être faire l'affaire :
mkfifo permet de créer un tube nommé : ton moyen de communication.
Le tail -f permet d'éviter la "fin de fichier" qui survient lorsque le echo ferme son côté du tube.
Si tu veux vraiment en faire quelque chose qui ressemble plus à un service, nohup peut t'intéresser aussi pour le rendre insensible à une déconnexion du terminal.
[^] # Re: mkfifo + tail -f ?
Posté par steph1978 . Évalué à 2.
Super, le "tail -f" ma manquait en effet pour ne pas avoir de fin de fichier.
Me reste à trouver comment récupérer la réponse car pour l'instant elle part vers le tty où le script a été lancé.
[^] # Re: mkfifo + tail -f ?
Posté par NeoX . Évalué à 3. Dernière modification le 05 mars 2014 à 11:37.
bah pareil mais dans l'autre sens ?
dans un autre terminal
tail -f masortie
[^] # Re: mkfifo + tail -f ?
Posté par steph1978 . Évalué à 2.
J'ai crié victoire trop vite.
Il fini quand même par raccrocher.
Je ne sais pas quel est le déclencheur.
Pour la sortie vers un pipe, pareil, si le processus en écoute se termine, cela termine mon script.
Galère…
[^] # Re: mkfifo + tail -f ?
Posté par NeoX . Évalué à 1.
c'est normal non ?
tu veux faire un programme qui ne serait pas ouvert en permanence ? (c'est la definition d'un daemon ou d'un serveur).
c'est quand meme toi qui ecrit le programme il me semble,
donc à toi de faire qu'il ne s'arrete pas s'il n'a rien à lire, ou qu'il se relance à intervalle regulier.
[^] # Re: mkfifo + tail -f ?
Posté par steph1978 . Évalué à 2. Dernière modification le 05 mars 2014 à 20:31.
Non, justement, dans mon besoin, j'explique que je veux transformer un script qui lit stdin et écrit sur stdout en un service persistent (appelons le deamon).
[^] # Re: mkfifo + tail -f ?
Posté par NeoX . Évalué à 2.
un daemon, c'est un programme qui "attend"
donc si ton script A n'attend pas,
inclue le dans un script B qui attend, puis execute le script A
il me semble que c'est le principe de (x)inetd
qui ecoute un port reseau et ne lance le service qu'à l'arrivée d'un paquet sur le port ecouté
[^] # Re: mkfifo + tail -f ?
Posté par totof2000 . Évalué à 2.
C'est ce que j'ai répondu plus haut. Il faut par contre jouer avec ses options pour esperer que le service se comporte comme il le veut.
[^] # Re: mkfifo + tail -f ?
Posté par steph1978 . Évalué à 2.
C'est déjà le cas : mon programme attend une ligne de stdin et produit une ligne en stdout, pui boucle.
Je vais creuser xinetd. Un peu lourd pour ce que je veux faire mais je n'y arrive pas avec socat donc il faut bien faire des concessions…
Merci pour ton aide en tout cas.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.