|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2006 Messages : 170 ![]() |
Bonjour,
J'ai développé une application pour un module embarqué avec busybox, je cherche a transformer mon programme, qui se lance pour le moment par ligne de commande, en daemon pour qu'il se lance au démarrage de linux. Si quelqu'un peut m'expliquer comment faire, je suppose que je doit quelque part configurer un fichier linux pour qu'il lance mon executable au démarrage. Par contre je ne sais pas si il faut modifier quelque chose dans le code de mon programme. Merci d'avance ! |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Inscription : octobre 2005 Messages : 344 ![]() |
Mets le dans le inittab ou dans les répertoires /etc/rc.d/rcx.d/
|
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : février 2006 Messages : 170 ![]() |
Ok merci !
Je n'ai pas lesrépertoires /etc/rc.d/rcx.d/ dans mon système embarqué par contre j'ai bien sûr l'initab. Voilà mon inittab Code :
Et comment mettre mon appli qui se trouvera par exemple dans "/bin". |
||
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Étudiant Inscription : juillet 2006 Messages : 242 ![]() |
Tu devrais avoir /etc/init.d car tu as la ligne
dans ton inittab. C'est ici que les scripts sont lancés au démarrage. Je ne connais pas busybox, mais su Debian par exemple pour lancer un programme au démarrage il faut : - Placer un script dans /etc/init.d/monscript - S'assurer qu'il soit executable (chmod +x) - Lancer en root : update-rc.d monscript defaults Pour un exemple de script tu peux regarder ce qui existe déjà, il faut faire un case sur l'argument, et gérer les cas : start, stop, restart. Eventuellement status si tu veux faire le pro |
|
|
00
|
|
|
#5 | |
|
Invité de passage
![]() Inscription : février 2006 Messages : 170 ![]() |
Citation:
Oui effectivement je dois l'avoir puisque la ligne est présente dans le code. Pourtant j'ai regardé et ca n'y été pas, ca doit être en fichier caché, je regarderai ca lundi. Par contre j'au réussi a faire mon daemon, en modifiant tout simplement le fichier inittab. J'y ai ajouté la ligne suivante. ::respawn:/appli/mon-prog J'ai également du modifier l'un des fichier appellés lors de la création de l'image linux de mon module embarqué, afin de créer le répertoire appli dans le système et y copier mon programme. |
|
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Étudiant Inscription : juillet 2006 Messages : 242 ![]() |
Il n'y a pas de fichiers cachés sous Linux
|
|
|
00
|
|
|
#7 | |
![]() ![]() Arnaud FeltzDéveloppeur .NET Inscription : août 2005 Messages : 5 204 ![]() |
Citation:
Et les fichiers commencant par un . ils sont pas cachés ceux la? Tu ne les vois pas en faisant un ls ou sur ton interface graphique
__________________
C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère Installation de Code::Blocks sous Debian à partir de Nightly Builds
|
|
|
00
|
|
|
#8 |
|
Membre éclairé
![]() Étudiant Inscription : juillet 2006 Messages : 242 ![]() |
Certes, je crois que j'ai un peu trop l'habitude de mon alias ls=ls -al
Quoiqu'il en soit il n'y a rien de caché dans /etc/init.d, ou alors c'est pas normal ! (à ma connaissance en tout cas) |
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() |
question à 0.00001€ comment vas-tu communiquer avec ton daemon ?
__________________
Nul ne peut mieux connaitre la connaissance qu'elle-même. |
|
00
|
|
|
#10 |
|
Membre habitué
![]() Inscription : août 2005 Messages : 118 ![]() |
Bonjour,
Lancer un daemon à partir de l'inittab n'est pas une tres bonne idée pour une raison philosophique. L'inittab fixe le comportement du programme init (premier processus). Il décrit les taches que celui-ci doit effectuer pour chaque runlevel. En ce sens, il doit être géneraliste (il s'agit de lancer le système pas des programmes). L'inittab fait ensuite appel aux scripts dans /etc/init.d/ pour initialiser un certain nombre de choses : _ Montage des systèmes de fichiers _ Lancement de daemon et éventuellement l'initialisation des variables Ensuite, il ouvre les consoles avec le programme approprier (getty ...) Par ailleurs, pour lancer un daemon proprement, on utilise l'utilitaire start-stop-daemon qui est fournis avec busybox. Donc pour ton problème, le plus simple est sans doute de rajouter au moment propice dans rcS quelque chose comme : /etc/init.d/mon_daemon start. Puis d'éditer le fichier mon_daemon pour le faire ressembler au fichier /etc/init.d/skeleton sous Debian Ainsi tu pourra entre autre arréter ton programme proprement ( /etc/init.d/mon_daemon stop ) A+ Joris |
|
|
00
|
|
|
#11 | |
|
Invité de passage
![]() Inscription : février 2006 Messages : 170 ![]() |
Citation:
Je ne suis pas sure de comprendre ta question, mais mon daemon communique via le port série avec un lecteur de carte à puce. Le but est de scruter en permanence la présence d'une carte et quand il y en a une qui se badge de lire et d'afficher en fonction de celle-ci des infos sur un petit écran LCD. |
|
|
|
00
|
|
|
#12 | ||
|
Invité de passage
![]() Inscription : février 2006 Messages : 170 ![]() |
Citation:
Alors voici mon fichier rcS : Citation:
Alors apparement il faut plutôt que je modifie rcS, mais comment ? Quelqu'un pourrait t'il me montrer sur l'exemple que j'ai mis ci dessus. |
||
|
|
00
|
|
|
#13 |
|
Membre éclairé
![]() Étudiant Inscription : juillet 2006 Messages : 242 ![]() |
Est-ce que tu as quelque chose dans /etc/init.d ? => ls -al /etc/init.d
|
|
|
00
|
|
|
#14 | |||
|
Invité de passage
![]() Inscription : février 2006 Messages : 170 ![]() |
Citation:
Oui oui finalement j'ai bien quelque chose, c'est ce que je disais dans mon dernier post. J'ai 2 fichiers : - rcS Citation:
Citation:
|
|||
|
|
00
|
|
|
#15 |
|
Membre éclairé
![]() Étudiant Inscription : juillet 2006 Messages : 242 ![]() |
D'accord je vois, ça ne fonctionne pas tout à fait comme sous Linux normal. Dans ce cas je pense que tu peux tout simplement rajouter ton fichier dans /etc/init.d et il devrait démarrer tout seul.
Dans ton script que tu rajoutes tu as juste à faire démarrer ton programme, comme si tu le lançais en ligne de commande. Si jamais ça ne fonctionne pas comme ça, rajoute une ligne dans rcS à la fin, là il n'y aura pas de problème je pense. Désolé de ne pas être plus précis, n'hésite pas à redemander si ça ne fonctionne pas ! |
|
|
00
|
|
|
#16 | |
|
Invité de passage
![]() Inscription : février 2006 Messages : 170 ![]() |
Citation:
Et enfin si ca ne marche, la seconde solution est de de pas créer de fichier mais de mettre le contenu de ce script à la fin du fixchier rcS, c'est çà ? Désolé j'ai en gros reformulé ce que tu m'a dit mais je voudrais être sur d'avoir bien compris. |
|
|
|
00
|
|
|
#17 | |||
|
Invité de passage
![]() Inscription : février 2006 Messages : 170 ![]() |
Bon alors j'ai essayer en insérant uniquement le fichier suivant dans init.d :
solde : Code :
Citation:
|
|||
|
|
00
|
|
|
#18 |
|
Membre éclairé
![]() Étudiant Inscription : juillet 2006 Messages : 242 ![]() |
En fait ce que je voulais dire quand je disais d'ajouter la ligne dans /etc/rcS ce n'est pas d'ajouter celle que tu as marqué, mais celle-ci :
Comme tu es sur que le script /etc/rcS est exécuté, rajoute cette ligne à la fin, ce qui devrait lancer ton application. Il faut que tu aies un moyen de contrôler le lancement aussi (ouverture de port, fichier pid, ... etc). |
|
|
00
|
|
|
#19 | |
|
Invité de passage
![]() Inscription : février 2006 Messages : 170 ![]() |
Bon ok alors j'ai refait le fichier rcS en y ajoutant à sa fin la ligne suivante :
ca marche l'appli se lance après le démarrage, mais par contre je ne comprend pas pourquoi mais je n'arrive plus à prendre la main sur le module embarqué avec telnet. Et ca c'est pas bon pour moi. Ca ne me faisait pas ca quand je lancer l'appli depuis inittab avec la ligne : Citation:
|
|
|
|
00
|
|
|
#20 |
|
Membre éclairé
![]() Étudiant Inscription : juillet 2006 Messages : 242 ![]() |
Tu n'as peut-être plus accès au telnet car le serveur ne démarre peut-être pas jusqu'au bout. Peut-être que ton appli ne quittant pas dans le rcS, l'initialisation du système ne se fait pas jusqu'au bout.
Je ne sais pas si je suis très clair. Ce que je veux dire c'est que ton appli ne se terminant pas, le système ne s'initialise peut-être pas jusqu'au bout. Essaye peut-être de la lancer en rajoutant & à la fin. Si cela en fonctionne pas il faut créer un deamon dans le code directement. De manière à ce que ton appli sorte de sa boucle main (donc rend la main au système), tout en continuant son exécution en arrière plan. Pour ça il existe par exemple la fonction daemonize(). Mais je ne peux pas trop t'en dire plus je ne l'ai jamais utilisé. Un peu de google devrait t'aider là dessus. Essaye de regarder il existe eput-être d'autres fonctions pour passer un processus en deamon. Bon courage ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com