• # pas trop compris

    Posté par  (site web personnel) . Évalué à 1.

    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.
    • [^] # Re: pas trop compris

      Posté par  . Évalué à -1.

      Le but final c'est de lancer un script au démarrage de la machine !
      • [^] # Re: pas trop compris

        Posté par  . Évalué à 0.

        un tutorial pour Debian et assimilées :
        http://www.andesi.org/index.php?node=28(...)
      • [^] # Re: pas trop compris

        Posté par  . Évalué à 1.

        Hum...

        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  . Évalué à 2.

    1) tu crées ton script (appelons-le truc.sh).
    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  . Évalué à 3.

      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.
      • [^] # Re: facile !

        Posté par  . Évalué à 2.

        Salut Calimero,

        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  . Évalué à 2.

          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é...
          • [^] # Re: facile !

            Posté par  . Évalué à 2.

            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.
  • # La seule option que je connais si t'es pas root

    Posté par  . Évalué à 1.

    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

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.