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
Rechercher : http://lists.freearchive.org/cgi-bin/search.cgi
Pour s'inscire par courriel :
'mailto:[EMAIL PROTECTED] se desinscrire par courriel :
    'mailto:[EMAIL PROTECTED]


_______________________________________________
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]'

Répondre à