Re: [CBLX] Problème de daemon

2005-06-27 Par sujet Bruno Marmol
Jean-François Colas <[EMAIL PROTECTED]> writes:

> Bonjour la ML,
>
> C'et moins une piste qu'une question ce que je mentionne là: ne peut-on pas 
> lancer une application par l'intermédiaire du fichier inittab?

Si, c'est possible, c'est même interessant quand on veut un progamme qui toune
en permanence (qui soit relancé en cas de plantage).  Chaque ligne de inittab a
un mode, et le mode respawn corresponds à relancer au cas où le programme est
arrété.   Bon attention aux programmes qui plantent dès le lancement, ça risque
de charger la machine...

-- 
Bruno Marmol.

Email: [EMAIL PROTECTED] - Tel: 04 76 61 53 04 - Fax: 04 76 61 52 52
Braillenet - Inria Rhône Alpes.
ZIRST - 655 Av de l'Europe.  - Montbonnot St Martin 
38334 St Ismier Cedex - France

___
Liste de diffusion CarrefourBLinuX 
CarrefourBLinuX@lists.freearchive.org
http://lists.freearchive.org/mailman/listinfo/carrefourblinux
Signets : http://fr.groups.yahoo.com/group/carrefourblinux/links/
Archives : http://lists.freearchive.org/pipermail//carrefourblinux
Anciennes archives (Yahoogroupes) :
http://fr.groups.yahoo.com/group/carrefourblinux/messages
Rechercher : http://lists.freearchive.org/cgi-bin/search.cgi
Pour s'inscire par courriel : 
'mailto:[EMAIL PROTECTED]'
Pour se desinscrire par courriel : 
'mailto:[EMAIL PROTECTED]'

Re: [CBLX] Problème de daemon

2005-06-24 Par sujet Jean-François Colas

Bonjour la ML,

C'et moins une piste qu'une question ce que je mentionne là: ne peut-on pas 
lancer une application par l'intermédiaire du fichier inittab?


Bon week-end,
J.-F.

Message de Delaunay Christophe, à 07:40 24/06/05

Bonjour tous,

Mon problème consiste à faire tourner une appli en "boîte noire" sur un PC 
linux. "Boîte noire", ça veut dire que le PC sur lequel va tourner l'appli 
n'aura à terme ni clavier ni écran.


Une fois qu'elle est lancée, l'appli en question n'a heureusemennt besoin 
d'aucune interaction avec l'utilisateur. Enfin si elle en a bien sûr mais 
tout se fait en remote, pas sur le PC lui-même.


Pour allumer et éteindre proprement le PC, j'ai fini par trouver mon 
bonheur. Bien sûr, pour l'allumer, c'est simple puisqu'on n'a qu'à appuyer 
sur le bouton power.


Maintenant, pour éviter unne extinction sauvage, j'ai trouvé un package 
qui s'appelle "acpid". J'ai installé ce package et je dois dire que je 
suis plutôt très content du résultat vu que maintenant, quand on appuie 
sur le bouton power alors que le PC tourne, le daemon apcid intercepte 
bien le signal et lance la commande poweroff comme si j'avais tapé halt 
depuis une console.


Mais comme d'hab, le problème arrive là où je ne l'attendais pas.

Ce qui m'arrive, c'est que si je lance l'appli à partir d'un shell 
habituel, elle va bien se détacher de la console comme le ferait n'importe 
quel daemon. Ensuite, elle s'installe et va tourner ainsi indéfiniment 
jusqu'à ce qu'on la tue et, en attendant, elle sert les requêtes de mon 
client comme elle avait l'habitude de le faire quand je ne la détachais 
pas de la console.


Maintenant, si je tente de démarrer l'appli à partir du /etc/rc.local, (je 
le fais tout à la fin du fichier pour m'assurer que tous les modules dont 
j'ai besoin sont chargés et ils le sont), l'appli démarre mais pour une 
raison que j'ignore, elle s'arrête de fonctionner comme si elle était 
tuée. Ça se traduit par le fait qu'elle commence à envoyer ses traces 
normalement dans un fichier et qu'à un moment, elle est interrompue 
abruptement sans me dire quel est le signal qu'elle a reçue pour s'arrêter 
ainsi, (un peu comme si je lui avais fait un kill -9 en plein vol).


Pour que mon appli tournne à la manière d'un daemon, j'ai essayé plusieurs 
méthodes. Dans un premier temps, j'avais pensé qu'il m'aurait suffi de 
m'immuniser contre le signal SIGHUP. J'ai donc fait un bête lancement du style


# nohup mon_appli

Effectivement, j'ai constaté qu'une fois l'appli lancée, quand je me 
déloguais, ça n'empêchais pas mon appli de continuer à tourner. J'ai donc 
vainement tenté ce


nohup mon_appli

Dans le /etc/rc.local.

Du coup, j'ai tenté une deuxième méthhode : la détacher de ma console dès 
son lancement. Pour ça j'ai lancé la commande suivante :


# setsid mon_appli

Là encore, dans une console, l'appli a bien démarré mais contrairement à 
avant, elle s'est de suite mise à tourner en background, c'est-à-dire 
indépendamment de toute console. J'ai donc vaillamment tenté de mettre


setsid mon_appli

dans mon /etc/rc.local mais là encore, au lieu de tourner normalement 
comme elle le fais quand je la lance dans une console, elle s'est 
subitement arrêtée sans que je parvienne à m'expliquer pourquoi.


Cette troisième fois, j'ai pris les grands moyens. Je suis allé voir un 
site qui expliquait comment faire un daemon tout simple. J'en ai écrit un 
tout simple qui écrit "coucou" cent fois dans un fichier puis qui s'arrête 
et j'ai constaté avec bonheur que mon daemon de test tourne aussi bien 
lorsque je le lance depuis un shell que dans le /etc/rc.local.


J'ai donc rapporté le code de lancement du daemon de test dans le main() 
de mon appli. Là encore, l'appli se lance bien dès que je tape


# mon_appli

dans un shell. Le shell me rend la main dès que l'appli a appelé fork() et 
mon appli sert en daemon toutes les requêtes que mon client qui soumet.


Par contre, si je met

mon_appli

dans le /etc/rc.local, l'appli commence à démarrer et s'arrête abruptement 
comme précédemment.


D'où ma question à laquelle je ne doute pas que les experts en dev de 
brltty sauront répondre


Quand on veut qu'une appli puisse tourner aussi bien attachée à une 
console qu'en mode daemon, lancée aussi bien par le système à la fin de 
son boot que par l'utilisateur plus tard à partir d'une console ? Si c'est 
un bug caché dans mon appli qui l'empêche de pouvoir être lancée par le 
système, comment puis-je faire pour le repérer ?


Merci infiniment. Bonne journée. @+ Chris
___
Liste de diffusion CarrefourBLinuX
CarrefourBLinuX@lists.freearchive.org
http://lists.freearchive.org/mailman/listinfo/carrefourblinux
Signets : http://fr.groups.yahoo.com/group/carrefourblinux/links/
Archives : http://lists.freearchive.org/pipermail//carrefourblinux
Anciennes archives (Yahoogroupes) :
http://fr.groups.yahoo.com/group/carrefourblinux/messages
Recherc

Re: [CBLX] Problème de daemon

2005-06-24 Par sujet Alexandre Dulaunoy
On Fri, 24 Jun 2005, Delaunay Christophe wrote:

>
> D'où ma question  à laquelle je ne doute pas que  les experts en dev
> de brltty sauront répondre
>
> Quand on veut qu'une appli  puisse tourner aussi bien attachée à une
> console qu'en mode daemon, lancée aussi bien par le système à la fin
> de son boot que par l'utilisateur plus tard à partir d'une console ?

screen permet de faire cela  rapidement et proprement sans changer ton
application.

screen -d -m -S monapplic /etc/lescriptpourdemarrer mon applic

Bien entendu dans ce cas  ton applic n'est pas daemon-aware mais c'est
le screen qui prends en  charge cela. Ton applic utilise uniquement le
vty.

http://libslack.org/daemon/ est aussi une autre approche.

http://www.gnu.org/software/screen/


Une autre approche assez courante est d'écrire ton programme avec deux
modes. Un  mode 'daemon' détaché et  un mode 'non-daemon'  qui est une
option au démarrage de ton applic.


> Si c'est un  bug caché dans mon appli qui  l'empêche de pouvoir être
> lancée par le système, comment puis-je faire pour le repérer ?

Un  petit 'strace'  pourrait de  permettre  de tracer  les syscall  de
l'application  et   de  voir  l'erreur   exacte  lors  du   fork()  ou
setsid()...

Je me demande si j'ai bien compris ta question,

hope this helps,

adulau


-- 
** Alexandre Dulaunoy (adulau)  http://www.foo.be/  0x44E6CBCD
**/ "To  disable the  Internet to  save EMI  and Disney  is  the moral
**/ equivalent of burning down the library of Alexandria to ensure the
**/ livelihood of monastic scribes." Jon Ippolito.
___
Liste de diffusion CarrefourBLinuX
CarrefourBLinuX@lists.freearchive.org
http://lists.freearchive.org/mailman/listinfo/carrefourblinux
Signets : http://fr.groups.yahoo.com/group/carrefourblinux/links/
Archives : http://lists.freearchive.org/pipermail//carrefourblinux
Anciennes archives (Yahoogroupes) :
http://fr.groups.yahoo.com/group/carrefourblinux/messages
Rechercher : http://lists.freearchive.org/cgi-bin/search.cgi
Pour s'inscire par courriel :
'mailto:[EMAIL PROTECTED]'
Pour se desinscrire par courriel :
'mailto:[EMAIL PROTECTED]'