Je poste ici car j'ai un problème pour faire fonctionner correctement un
CGI écrit en perl. Ce CGI permet de lancer un programme de type démon
qui tourne donc indéfiniment. Le problème est que ce programme est lancé
via la commande system et PERL attends un code de résultat de cette
commande pour terminer l'exécution du CGI. Comme mon démon tourne en
boucle, forcément system ne retourne rien et par conséquent mon CGI se
met en <defunct>.
Je cherche donc une solution pour pouvoir lancer le démon et terminer
mon CGI correctement. Pour information j'ai testé la méthode indiquée
dans la perldoc perlipc mais la manip indiqué me pose problème :
J'utilise bien la procédure daemonize qui consiste à rediriger les
sorties standard et à faire un fork. Mon script CGI s'arrete bien avec
mon démon lancé mais le problème est qu'après avoir lancé mon démon, je
dois faire de l'affichage sur la page HTML exprimant des résultats sur
le lancement du démon et vu que j'ai redirigé la sortie standard, je
n'ai plus d'affichage. Si je ne redirige pas STDOUT, je me retrouve avec
le bon affichage mais mon process CGI en mode defunct à nouveau.
J'avoue que je suis à court de solutions, car en plus je ne suis pas un
expert perl.
Je cherche donc des pistes de solutions pour résoudre mon problème.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
johnny brasseur
Salut Olivier , voici quelques commentaires et une solution que je préconise dans ce genre de cas. Au lieu de lancer ta commande system par ton script CGI, tu peux faire comme suit :
1) tu crée un script (en perl) lancé par la crontab toutes les minutes qui va scrutter la création d'un fichier qui sera placé dans un répertoire de ton choix et qui peut s'appeler "/tmp/LANCEMENT" par exemple. Ce script vérifie la présence de ce fichier , s'il existe il lance le daemon et supprime le fichier. Quand tu veux arreter ton daemon, tu attends l'arrivée du fichier nommé /tmp/ARRET créé par le script CGI.
2) ton programme CGI lui ne fait que créer un fichier /tmp/LANCEMENT quand tu appelle la page ou le bouton qui va bien. Si tu veux arreter , pareil , tu crée un fichier /tmp/ARRET. facile non ?
Si une minute est trop lent, tu peux toujours faire tourner ton programme perl en mémoire avec un sleep qui va bien.
Si ca peut aider...
Bonjour,
../..
via la commande system et PERL Pas bien là
../..
attends un code de résultat de cette commande pour terminer l'exécuti on du CGI. Comme mon démon tourne en boucle, forcément system ne retourne rien et par conséquent mon CGI se met en <defunct>. Normal
Je cherche donc une solution ... ../..
Je cherche donc des pistes de solutions pour résoudre mon problème. Faut pas désespérer ...
Merci par avance 2rien
Cordialement, Olivier BONHOMME Pareil
Johnny
Salut Olivier , voici quelques commentaires et une solution que je
préconise dans ce genre de cas.
Au lieu de lancer ta commande system par ton script CGI, tu peux faire
comme suit :
1) tu crée un script (en perl) lancé par la crontab toutes les
minutes qui va scrutter la création d'un fichier qui sera placé dans
un répertoire de ton choix et qui peut s'appeler "/tmp/LANCEMENT" par
exemple. Ce script vérifie la présence de ce fichier , s'il existe il
lance le daemon et supprime le fichier.
Quand tu veux arreter ton daemon, tu attends l'arrivée du fichier
nommé /tmp/ARRET créé par le script CGI.
2) ton programme CGI lui ne fait que créer un fichier /tmp/LANCEMENT
quand tu appelle la page ou le bouton qui va bien. Si tu veux arreter ,
pareil , tu crée un fichier /tmp/ARRET.
facile non ?
Si une minute est trop lent, tu peux toujours faire tourner ton
programme perl en mémoire avec un sleep qui va bien.
Si ca peut aider...
Bonjour,
../..
via la commande system et PERL
Pas bien là
../..
attends un code de résultat de cette commande pour terminer l'exécuti on du CGI.
Comme mon démon tourne en boucle,
forcément system ne retourne rien et par conséquent mon CGI se
met en <defunct>.
Normal
Je cherche donc une solution ...
../..
Je cherche donc des pistes de solutions pour résoudre mon problème.
Faut pas désespérer ...
Salut Olivier , voici quelques commentaires et une solution que je préconise dans ce genre de cas. Au lieu de lancer ta commande system par ton script CGI, tu peux faire comme suit :
1) tu crée un script (en perl) lancé par la crontab toutes les minutes qui va scrutter la création d'un fichier qui sera placé dans un répertoire de ton choix et qui peut s'appeler "/tmp/LANCEMENT" par exemple. Ce script vérifie la présence de ce fichier , s'il existe il lance le daemon et supprime le fichier. Quand tu veux arreter ton daemon, tu attends l'arrivée du fichier nommé /tmp/ARRET créé par le script CGI.
2) ton programme CGI lui ne fait que créer un fichier /tmp/LANCEMENT quand tu appelle la page ou le bouton qui va bien. Si tu veux arreter , pareil , tu crée un fichier /tmp/ARRET. facile non ?
Si une minute est trop lent, tu peux toujours faire tourner ton programme perl en mémoire avec un sleep qui va bien.
Si ca peut aider...
Bonjour,
../..
via la commande system et PERL Pas bien là
../..
attends un code de résultat de cette commande pour terminer l'exécuti on du CGI. Comme mon démon tourne en boucle, forcément system ne retourne rien et par conséquent mon CGI se met en <defunct>. Normal
Je cherche donc une solution ... ../..
Je cherche donc des pistes de solutions pour résoudre mon problème. Faut pas désespérer ...