OVH Cloud OVH Cloud

Application Perl en daemon ?

6 réponses
Avatar
Sameline
Bonjour,

Merci d'abord a ceux qui m'ont deja repondu a mes nombreuses questions
;=) et qui du coup me font progresser dans mon apprentissage

En voici une nouvelle :

J'ai une application perl que je dois lancer toute les minutes par un
cron. J'aimerais ne plus la lancer par cron mais la transformer en daemon.

Actuellement, j'en suis a quand je la lance, elle ne me rends pas la
main mais bon fait son travail grace a une boucle et avec la commande
sleep pour ralentir la boucle.

En faite, j'aimerais ensuite la lancer par daemontools ou par /etc/init.d .

Merci d'avance

6 réponses

Avatar
Emmanuel Florac
Le Sun, 11 Dec 2005 08:33:54 +0100, Sameline a écrit :


Actuellement, j'en suis a quand je la lance, elle ne me rends pas la
main mais bon fait son travail grace a une boucle et avec la commande
sleep pour ralentir la boucle.


Pour qu'elle se "démonise", tu peux utiliser cette fonction :

sub daemonize {

chdir '/' or die "Impossible de changer de directory!";

open ( STDIN , '</dev/null' ) or die "impossible de rediriger STDIN :
$!");
open ( STDERR , ">>/var/log/error.log") or die "impossible d'ouvrir le
fichier d'erreur : $!");
open ( STDOUT , ">>/var/log/activity.log") or die "impossible d'ouvrir le
fichier de log : $!");

fork and exit;

return 1;
}


--
Toutes les organisations ont leur règles, et les Femmes Algériennes
doivent avoir aussi leurs règles.
Aït Ahmed.

Avatar
Sameline
Merci ;=)

pourrais tu m'en dire un peu plus sur son principe ? j'ai du mal a la
comprendre ;=)

surtout comment l'integrer a mon programme ? je lance cette
sous routine a la fin de mon execution ?




Actuellement, j'en suis a quand je la lance, elle ne me rends pas la
main mais bon fait son travail grace a une boucle et avec la commande
sleep pour ralentir la boucle.


Pour qu'elle se "démonise", tu peux utiliser cette fonction :

sub daemonize {

chdir '/' or die "Impossible de changer de directory!";

open ( STDIN , '</dev/null' ) or die "impossible de rediriger STDIN :
$!");
open ( STDERR , ">>/var/log/error.log") or die "impossible d'ouvrir le
fichier d'erreur : $!");
open ( STDOUT , ">>/var/log/activity.log") or die "impossible d'ouvrir le
fichier de log : $!");

fork and exit;

return 1;
}





Avatar
Sameline
Ok j'ai trouve et reussi via Proc::Daemon



Bonjour,

Merci d'abord a ceux qui m'ont deja repondu a mes nombreuses questions
;=) et qui du coup me font progresser dans mon apprentissage

En voici une nouvelle :

J'ai une application perl que je dois lancer toute les minutes par un
cron. J'aimerais ne plus la lancer par cron mais la transformer en daemon.

Actuellement, j'en suis a quand je la lance, elle ne me rends pas la
main mais bon fait son travail grace a une boucle et avec la commande
sleep pour ralentir la boucle.

En faite, j'aimerais ensuite la lancer par daemontools ou par /etc/init.d .

Merci d'avance


Avatar
Nicolas George
Emmanuel Florac wrote in message
:
fork and exit;


Il manque un setsid.

Avatar
Emmanuel Florac
Le Sun, 11 Dec 2005 12:47:39 +0000, Nicolas George a écrit :


Il manque un setsid.


Je supputais que l'application était lancée avec un SID adapté dès le
départ, mais on peut ajouter ça effectivement.

--
Si ça a l'air facile, c'est difficile. Si ça a l'air difficile, c'est
carrément impossible. Si ça a l'air impossible, c'est un compilateur
Ada.
Théorème de Stockmayer.

Avatar
Emmanuel Florac
Le Sun, 11 Dec 2005 10:00:14 +0100, Sameline a écrit :


pourrais tu m'en dire un peu plus sur son principe ? j'ai du mal a la
comprendre ;=)

Elle change le répertoire de travail en '/' pour ne pas poser de

problème de montages.
Elle redirige les entrées et sorties du programme vers des fichiers, ce
qui le déconnecte du terminal courant.
Ensuite, elle forke le programme pour le détacher tout à fait de son
processus père.

surtout comment l'integrer a mon programme ? je lance cette
sous routine a la fin de mon execution ?


En général, quand on veut créer un démon on veut plutôt le faire au
tout début de l'éxécution qu'à la fin...

--
Le travail est la malédiction des classes qui boivent.
O. Wilde.