Perl et démon ?

bon j’ai un programme en perl …

j’aimerai le transformer en démon sous nux quelqu’un sait comment on fait ca ?

ex de mon prorgramme :

my $dbh = DBI->connect(‘dbig:dbname=blah’, undef, undef, { AutoCommit => 1 });
if ($dbh) {
blah
}
else
{
blah
}

thks
Bussiere

daemon?  Dans le sens il est toujours actif (te pompe des ressources) et agit dès accès à un élément de son domaine.

Ou un petit programme planifié qui va se lancer de temps en temps?

Pour le deuxième cas, il existe : cron…
je sais plus comment le gérer mais c’est pas dur In that case, Google is ur friend!

il ne suffit pas de le lancer dans les .rc comme tu lance httpd ou sshd ?

Kzi> Httpd et sshd font daemon à la base!
Les lancer dans le .rc c’est comme mettre un raccourcis dans “démarrage” dans la barre démarrer windows. ca se lance et si çà doit s’arreter parce que pas de boucle, pas de daemon, çà s’arrete.

C’est pourquoi çà dépend de pas mal de chose!
Soit on fait une boucle qui prend plein de ressource… Soit on est un peu plus fort et on trouve un système qui fait un vrai daemon qui mange un peu moins de ressoucres.
Soit on cron le truc (tache planifié…)
Soit on va dans le script du truc qui risque de déclencher le script perl et on lui de lancer lescript quand il s’active.

ouaip cron me parait la meilleure solution
parce que pour le transformer end emon je ne trouve pas sous google des masses
thks
Bussiere

[quote]ouaip cron me parait la meilleure solution
parce que pour le transformer end emon je ne trouve pas sous google des masses[/quote]Qu’est ce que tu appelles transformer en demon ?
Si tu parles des programmes comme sshd ou apache, tu n’as rien de special à faire, juste une boucle qui attend les connections (dans le cas d’un demon qui écoute sur le réseau).
Après si tu parles des programmes qui se mettent automatiquement en background, ces programmes la font juste un double fork, pour que le premier fasse un exit et rende la main au shell. Mais franchement ca c’est pas une bonne idée du tout
Si quelqu’un veut lancer ton programme en background il rajoute un ‘&’ à la fin de la commande, mais le background automatique ca empeche de faire la supervision d’un processus et ce genre de choses (avec le double fork le process devient fils de init, et donc tu peux pas faire de wait dessus pour par exemple le relancer automatiquement en cas de pb, ou recuperer son code de retour, voir par exemple runit et daemontools).

[quote]C’est pourquoi çà dépend de pas mal de chose!
Soit on fait une boucle qui prend plein de ressource… Soit on est un peu plus fort et on trouve un système qui fait un vrai daemon qui mange un peu moins de ressoucres.[/quote]Non, en general tu fais juste un appel systeme bloquant. Et tant qu’aucune donné ou aucun signal que tu attends n’arrive (par exemple quand personne ne se connecte à ton serveur web) le processus continue de dormir (et ne consomme pas de cpu puisque jamais schedulé).
Sur beaucoup de machines, la plupars des processus passent la majorité du temps à dormir

Ce message a été édité par BokLM le 19/07/2004

oui un truc qui se lance en background et de maniere infinis …

parce que il me prends la tete avec un while true
thks
Bussiere

[quote]Non, en general tu fais juste un appel systeme bloquant. …
Sur beaucoup de machines, la plupars des processus passent la majorité du temps à dormir

Ce message a été édité par BokLM le 19/07/2004[/quote] C’est çà le problème! C’est ce qu’il faudrait faire mais le peut-on en perl?
Double fork? Je me rappelle pas si çà existe le fork en perl…
Ca fait un petit temps que j’ai laché perl mais j’avais pas fait de daemon de toute façon…

Je pense que tant que Mr Perl ne rponds pas, il vaut mieux que buss cron

[quote]oui un truc qui se lance en background et de maniere infinis …

parce que il me prends la tete avec un while true[/quote]Il est censé faire quoi ton programme ?
Pour le background tu rajoute un ‘&’ au moment le lancer, et pour qu’il tourne de maniere infinie ca ca depend de ce que doit faire le programme, il suffit que tu lui donne du travail de facon infinie, par exemple avec un while (avec un appel bloquant ou un sleep au milieu du while si tu veux pas qu’il te prenne trop de cpu, mais après ca depend completement de ce que doit faire le programme).
Je vois pas trop ou est le probleme.

luire une data base de user et ecrire des fichiers en fonction de cette database
thks
Bussiere

T’as besoin d’un daemon pour çà?

Tu peux pas appeler le script quand tu as besoin de ces infos?

non parce que c pôur gerer des listes blanches noir d’email dans ma lutte contre le spam
donc elles doivent etre mise a jour tout le temps
@+
Bussiere

[quote][quote]
Non, en general tu fais juste un appel systeme bloquant. …
Sur beaucoup de machines, la plupars des processus passent la majorité du temps à dormir [/quote] C’est çà le problème! C’est ce qu’il faudrait faire mais le peut-on en perl?[/quote]Ben oui, quand tu lis dans un fichier ou sur une connection en Perl comme dans n’importe quel langage il utilise des appels systeme qui sont bloquants.

[quote]Double fork? Je me rappelle pas si çà existe le fork en perl…[/quote]Oui, bien sur qu’on peut faire des forks en perl. Mais bon, justement le double fork c’est le truc qu’il n’est pas conseillé de faire (et qui ne rend pas un programme infini).

[quote]Je pense que tant que Mr Perl ne rponds pas, il vaut mieux que buss cron [/quote]Tout depend de ce que doit faire le programme.

[quote]luire une data base de user et ecrire des fichiers en fonction de cette database [/quote]Tu peux faire un while, avec un sleep de 3 secondes au milieu si tu veux le faire toutes les 3 secondes (par exemple).
Ou bien tu peux aussi faire le while/sleep a l’exterieur, par exemple avec un script shell, ou avec cron.
Ce message a été édité par BokLM le 19/07/2004