Salut,
Comment peut-on s'y prendre pour lancer automatiquement un programme au démarrage de Linux, sous compte utilisateur, sans besoin de se connecter ? (en fait plus précisément il s'agit d'une appli Java lancée par un script shell)
Salut,
Comment peut-on s'y prendre pour lancer automatiquement un programme au démarrage de Linux, sous compte utilisateur, sans besoin de se connecter ? (en fait plus précisément il s'agit d'une appli Java lancée par un script shell)
Bon en fait sur une distribution linux tu as une notion de runlevel qui défini l'état dans lequel se trouve la machine. Les runlevels vont de 0 à 6.
0 : arret
1 : mode mono-user (maintenance)
2 : mode mutli-user sans reseau
3 : mode multi-user avec reseau
4 : non utilisé par défaut
5 : mode avec serveur x lancé
6 : redémarrage
Ce qu'il faut savoir c'est que pour passer au runlevel 5, ton ordinateur est obligé de passé par le 1,2,3,4 et pour repasser du 5 au 3 il doit faire 5,4,3.
Le repertoire /etc/init.d contient tout les scripts de tout les runlevels. Ce qu'il faut lancé est défini dans un repertoire /etc/rc_unnuméro.d. Dans ces repertoires rc tu ne trouve que des liens symboliques vers des scripts de /etc/init.d. Donc quand tu démmarre ben il va éxécuté tout ce qui se trouve dans le 1 puis le 2 ...
Moi sous Debian on m'as conseillé de mettre mes liens dans le rc2.
Encore une chose que tu dois savoir, ton lien doit avoir une syntaxe particulière. Pour que la machine le lance il doit commencer par S suivis d'un nombre, tu constatera que tout les autres lien des repertoires commencent soit par un S soit par un K, le K c'est pour les services qu'il faut arreter quand tu redescend de runlevel (exemple tu passe du 5 au 2)
Lorsque ton script qui est placé dans /etc/init.d sera appelé, il le sera avec le paramètre start si c'est le lien S qui a été utilisé ou le paramètre stop si c'est celui avec le K qui a été utilisé.
Ce que tu place dans /etc/init.d sera bien sur ton script shell
La meilleure méthode est celle décrite par HNT (utiliser des scripts dans /etc/init.d et les lancer dans les /etc/rcxxxx). Une autre méthode un peu moins conventionnelle et moins "propre" serait d'utiliser le fichier /etc/rc.local qui peut être utilisé pour démarrer des services additionnels, et qui est un des fichiers de démarrage qui est lu pratiquement en dernier (après les inittab et rc.xx)
Ok merci pour les infos détaillés et les différentes options. Je me trompe peut-etre mais à priori dans ces deux cas, le script serait lancé sous compte root. Quel serait le meilleur moyen de le lancer sous compte utilisateur, sans meme que l'utilisateur soit connecté ? (par exemple via su/sudo ? l'intéret étant que le programme lancé ne puisse pas aller toucher à des fichiers système par erreur)
etant donner que les fichiers dans l init sont lancé par le root, tu peut tres bien lancer ton application comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 su - mon_utilisateur -c /repertoire/ma_commande
Je confirme, tu taê ça dans l'entête de ton script et il s'éxecutera avec les droits de cet utilisateur.
Partager