Salut à tous,
j'aurai aimé savoir comment en tant qu'utilisateur normal d'une machine linux je peux lancer au boot de la machine des scripts ou des programmes !
Cordialement,
J'ai pas trop compris ce que tu voulais, mais au boot de la machine, tout est executé en tant que root si je ne m'abuse.
Tous les scripts démarré durant le boot se trouve dans /etc/init.d/ et les runlevel (sous debian, le runlevel par défaut est 2) sont /etc/rcX.d/ avec X = {0, ..., 6}
runlevel 0 = arrêt de la machine
runlevel 1 = mode single-user
runlevel 2 = normal
runlevel 3, 4, 5 = comme tu veux
runlevel 6 = redémarrage
(sous debian tout cela)
Dans chacun des rep, tu as des liens vers les scripts de init.d
Mais bon, je ne sais pas si c'est bien cela que tu demandais.
Si tu es un utilisateur normal (non root), à priori tu ne peux pas exécuter de script avant que ta session n'ait démarré. Ce serait un gros trou de sécurité si c'était faisable :)
Si tu as accès au root, alors, sous debian, il suffit que tu ajoutes un script (exécutable) dans /etc/init.d/. Ce script, idéalement, doit pouvoir se lancer avec comme premier paramètre, start ou stop (tu peux prendre exemple sur les autres scripts de ce même répertoire). Ensuite a commande update-rc ton_script start SNN Slevel_1 Slevel_2 ... Slevel_x . stop KNN Klevel_1 Klevel_2 ... Klevel_x. (ne pas oublier les '.' (points) dans la ligne de commande)
Te crée les liens symboliques (symlinks) dans les bons répertoires (/etc/rc*.d/) pour que ton script soit lancé/exécuté (ton_script start) à la position SNN pour les "levels" (~ "niveaux d'exécution", j'aime pas trop l'expression) Slevel_i ; et qu'il soit stoppé (ton_script stop) à la position KNN pour les "levels" Klevel_i. man update-rc dans tous les cas :)
J'vais faire mon calimero....
Est-ce quelqu'un aurait l'amabilité de m'expliquer pourquoi mon message ci-dessus a été moinsé alors qu'il apporte, sinon la solution, au moins une solution au problème posé ?
Et puis même si c'est hors sujet (ce dont je doute, puisque ce que je propose permet quand même de lancer un script en étant connecté autrement qu'en root au boot de la machine), j'ai quand même fait l'effort de répondre en prenant sur mon temps, en me documentant pour un problème dont je n'ai à priori rien à faire, puisque je ne suis pas l'instigateur de ce thread.
Tout ça pour dire que ce genre de réaction a plutôt tendance à me décourager, et que j'ai de moins en moins envie d'aider dans les forums.
Voilà, c'était mon petit coup de blues du dimanche.
Je suppose c'est parceque ta méthode sort complètement des mécanismes basés sur les runlevels System V, et a de ce fait certains inconvénients :
- il est impossible de *ne pas* lancer le process si besoin est (pas de "single user mode" dans lequel ton process ne serait pas lancé)
- tu ne gères pas les dépendances : en général, il y a des prérequis au lancement d'un démon ou d'un programme (par exemple la couche réseau doit être activée, ou un démon syslog pour logguer les sorties de ton programme)
- elle n'offre pas de solution standard pour relancer le programme (/etc/init.d/monprogramme restart) si c'est un démon
Sinon, c'est effectivement une solution valable, au même titre que plein d'autres solutions plus ou moins propres.
il est impossible de *ne pas* lancer le process si besoin est (pas de "single user mode" dans lequel ton process ne serait pas lancé)
Ben si, c'est justement la case 2 ! Tu mets la liste des runlevels pour lesquels il faut lancer la commande.... Si tu veux pas qu'elle se lance au runlevel 1, tu mets pas le 1, on ne peut pas faire plus simple.
Pour le reste, je suis partiellement d'accord.
Si tu ne veux pas que la commande soit tuée, un genre de daemon, tu mets respawn au lieu de once, etc.
Même si ce sont des mécanismes différents des scripts placés dans /etc/rc.d/init.d, je pense que dans ce cas là ça peut être une bonne solution.
Par contre, à moins de dire une connerie (ce ne serait pas la première fois), il me semble bien que le /etc/inittab est exécuté en dernier, donc pour le coup des dépendances....
Sinon, y'avait un truc à faire pour se passer de la commande su : changer les permissions du script de façon à avoir un truc de ce genre :
-rwsrw-r--- nobody nogroup truc.sh
Bref, ce qui compte, c'est le premier tripplet : rws fera que le process appartiendra (sera executé en tant que) nobody, par exemple, mais je n'ai pas testé...
au temps (ou "autant" ou "aux taons" ou...) pour moi concernant le single user mode.
Et tu as raison, effectivement les programmes de inittab sont apparement lancés en dernier (cf http://oldfield.wattle.id.au/luv/boot.html(...) )... mais bon, les dépendances ça fonctionne dans les deux sens : certains démons/scripts doivent être lancés AVANT d'autres.
c'est de passer par cron : crontab -e et mettre : @reboot /chemin/vers/le/script
Plus d'infos sur man 5 crontab
Mac
PS : @reboot n'est pas dispo sur toutes les versions de cron
PS2 : évidemment, faut rebooter pour vérifier si ça fonctionne... pas évident à faire non plus si t'es pas root ;P
# pas trop compris
Posté par elloco (site web personnel) . Évalué à 1.
Tous les scripts démarré durant le boot se trouve dans /etc/init.d/ et les runlevel (sous debian, le runlevel par défaut est 2) sont /etc/rcX.d/ avec X = {0, ..., 6}
runlevel 0 = arrêt de la machine
runlevel 1 = mode single-user
runlevel 2 = normal
runlevel 3, 4, 5 = comme tu veux
runlevel 6 = redémarrage
(sous debian tout cela)
Dans chacun des rep, tu as des liens vers les scripts de init.d
Mais bon, je ne sais pas si c'est bien cela que tu demandais.
[^] # Re: pas trop compris
Posté par loly . Évalué à -1.
[^] # Re: pas trop compris
Posté par melyadon . Évalué à 0.
http://www.andesi.org/index.php?node=28(...)
[^] # Re: pas trop compris
Posté par Mikaël Cordon . Évalué à 1.
Si tu es un utilisateur normal (non root), à priori tu ne peux pas exécuter de script avant que ta session n'ait démarré. Ce serait un gros trou de sécurité si c'était faisable :)
Si tu as accès au root, alors, sous debian, il suffit que tu ajoutes un script (exécutable) dans /etc/init.d/. Ce script, idéalement, doit pouvoir se lancer avec comme premier paramètre, start ou stop (tu peux prendre exemple sur les autres scripts de ce même répertoire). Ensuite a commande update-rc ton_script start SNN Slevel_1 Slevel_2 ... Slevel_x . stop KNN Klevel_1 Klevel_2 ... Klevel_x. (ne pas oublier les '.' (points) dans la ligne de commande)
Te crée les liens symboliques (symlinks) dans les bons répertoires (/etc/rc*.d/) pour que ton script soit lancé/exécuté (ton_script start) à la position SNN pour les "levels" (~ "niveaux d'exécution", j'aime pas trop l'expression) Slevel_i ; et qu'il soit stoppé (ton_script stop) à la position KNN pour les "levels" Klevel_i.
man update-rc dans tous les cas :)
# facile !
Posté par Gyro Gearllose . Évalué à 2.
2) dans /etc/inittab, tu ajoutes une ligne ressemblant à ça :
nob:12345:once:su - nobody -c "/chemin/truc.sh"
Les champs sont séparés par ':'.
Le premier, c'est un identifiant qui doit être unique
Le second, c'est la liste des runlevels pour lesquels cette commande sera lancée.
Le troisième, c'est l'action à appliquer sur la commande (once, respawn, etc.)
Le dernier, c'est la commande elle-même.
Plus d'infos ici
http://publib16.boulder.ibm.com/pseries/en_US/files/aixfiles/initta(...)
ou, pour une liste plus complète :
http://www.google.fr/search?hl=fr&q=inittab&meta=(...)
Ici, j'ai utilisé la commande su pour demander de se connecter en tantqu'utilisateur nobody, pour executer la commande /chemin/truc.sh.
Tu auras plus d'infos sur la page de man oud'info de su.
Voilà, et comme on dit, j'espère que ça t'aidera à résoudre don problème !
[^] # Re: facile !
Posté par Gyro Gearllose . Évalué à 3.
Est-ce quelqu'un aurait l'amabilité de m'expliquer pourquoi mon message ci-dessus a été moinsé alors qu'il apporte, sinon la solution, au moins une solution au problème posé ?
Et puis même si c'est hors sujet (ce dont je doute, puisque ce que je propose permet quand même de lancer un script en étant connecté autrement qu'en root au boot de la machine), j'ai quand même fait l'effort de répondre en prenant sur mon temps, en me documentant pour un problème dont je n'ai à priori rien à faire, puisque je ne suis pas l'instigateur de ce thread.
Tout ça pour dire que ce genre de réaction a plutôt tendance à me décourager, et que j'ai de moins en moins envie d'aider dans les forums.
Voilà, c'était mon petit coup de blues du dimanche.
[^] # Re: facile !
Posté par mac . Évalué à 2.
Je suppose c'est parceque ta méthode sort complètement des mécanismes basés sur les runlevels System V, et a de ce fait certains inconvénients :
- il est impossible de *ne pas* lancer le process si besoin est (pas de "single user mode" dans lequel ton process ne serait pas lancé)
- tu ne gères pas les dépendances : en général, il y a des prérequis au lancement d'un démon ou d'un programme (par exemple la couche réseau doit être activée, ou un démon syslog pour logguer les sorties de ton programme)
- elle n'offre pas de solution standard pour relancer le programme (/etc/init.d/monprogramme restart) si c'est un démon
Sinon, c'est effectivement une solution valable, au même titre que plein d'autres solutions plus ou moins propres.
[^] # Re: facile !
Posté par Gyro Gearllose . Évalué à 2.
Ben si, c'est justement la case 2 ! Tu mets la liste des runlevels pour lesquels il faut lancer la commande.... Si tu veux pas qu'elle se lance au runlevel 1, tu mets pas le 1, on ne peut pas faire plus simple.
Pour le reste, je suis partiellement d'accord.
Si tu ne veux pas que la commande soit tuée, un genre de daemon, tu mets respawn au lieu de once, etc.
Même si ce sont des mécanismes différents des scripts placés dans /etc/rc.d/init.d, je pense que dans ce cas là ça peut être une bonne solution.
Par contre, à moins de dire une connerie (ce ne serait pas la première fois), il me semble bien que le /etc/inittab est exécuté en dernier, donc pour le coup des dépendances....
Sinon, y'avait un truc à faire pour se passer de la commande su : changer les permissions du script de façon à avoir un truc de ce genre :
-rwsrw-r--- nobody nogroup truc.sh
Bref, ce qui compte, c'est le premier tripplet : rws fera que le process appartiendra (sera executé en tant que) nobody, par exemple, mais je n'ai pas testé...
[^] # Re: facile !
Posté par mac . Évalué à 2.
Et tu as raison, effectivement les programmes de inittab sont apparement lancés en dernier (cf http://oldfield.wattle.id.au/luv/boot.html(...) )... mais bon, les dépendances ça fonctionne dans les deux sens : certains démons/scripts doivent être lancés AVANT d'autres.
# La seule option que je connais si t'es pas root
Posté par mac . Évalué à 1.
@reboot /chemin/vers/le/script
Plus d'infos sur man 5 crontab
Mac
PS : @reboot n'est pas dispo sur toutes les versions de cron
PS2 : évidemment, faut rebooter pour vérifier si ça fonctionne... pas évident à faire non plus si t'es pas root ;P
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.