Exécuter un alias au démarrage

vivelesgrecs Messages postés 71 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Tout est dans le titre: comment faire pour exécuter un alias linux au démarrage de la machine.
Merci d'avance,
Vivelesgrecs

7 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    voici mon fichier:
    cd && cd mc-server && sudo screen java -Xms512M -Xmx1024M -XX:MaxPermSize=128M $=128M -jar spigot.jar nogui


    Si l'idée est de lancé un service, plutôt que d'écrire dans /etc/rc.local, il serait plus propre de créer un service. Tu peux par exemple repartir de
    https://forums.commentcamarche.net/forum/affich-25769449-minecraft-serveur#1

    j'ai mis ma ligne de commande dans rc.local, j'ai exécuté le fichier, tout marche.
    mas si j’éteins la machine, le processus (qui est un screen) n'apparait pas après la commande screen -r et le serveur est inaccessible.


    Alors soit j'ai mal compris, soit tu n'as pas bien compris ce que fait la commande screen.

    La commande
    screen
    permet de lancer une application en l'associant à un screen, puis de la "récupérer" par la suite avec la commande
    screen
    .

    Par exemple, supposons que tu es à la maison et tu veux lancer un calculer sur un serveur au travail, tu vas te connecter à ce serveur. Si tu lances ton calcul sans screen, dès que tu te déconnectes (depuis la maison) de ce serveur, le calcul va s'arrêter. Pourquoi ? Parce qu'en te déconnectant, tu vas également tuer le processus (typiquement un shell) qui t'a permis de lancer le calcul, et donc le programme de calcul aussi.

    C'est là que
    screen
    intervient. Tu te connectes à ton serveur, tu lances un screen, puis ton calcul dedans. Au moment où tu te déconnectes, le screen reste en vie et donc la calcul aussi.

    Toutefois, cela suppose que le serveur continue à être allumer pour faire ses calculs ! Si tu éteins le serveur, il tue tous ses processus, ce qui inclue les éventuels screens et les processus qui y sont attachés.

    Du coup quand tu dis que lorsque tu éteins ta machine, ton programme devient inaccessible, eh bien c'est tout à fait normal, et le screen n'y changera rien.

    Bonne chance
    2
    1. vivelesgrecs Messages postés 71 Statut Membre 4
       
      non, je voulais dire si j’éteins et je rallume
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > vivelesgrecs Messages postés 71 Statut Membre
       
      Si tu éteins et que tu rallumes quoi ?
      0
    3. vivelesgrecs Messages postés 71 Statut Membre 4
       
      je suis d'accord, je dis juste que je lance mon serveur depuis un autre ordi connecté en ssh. je romps après la connexion, donc j'ai besoin d'un screen.je voudrais juste que si il y ai une coupure de courant, le serveur se rallume automatiquement. je précise que le Raspberry n'a pas de bouton on off donc tant qu'il est branché il marche et si on l’éteint il faut le débrancher et le rebrancher pour le rallumer.zipe31 si j’éteins et je rallume le pc qui héberge ( le Raspberry).
      0
    4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
       
      donc j'ai besoin d'un screen

      Pas si tu lances ton programme comme un démon au travers d'un service. C'est par exemple de cette manière qu'un serveur ssh fonctionne.

      je voudrais juste que si il y ai une coupure de courant, le serveur se rallume automatiquement.

      S'il y a une coupure de courant et que le service est dans la chaîne de démarrage, comme indiqué dans le lien :
      https://forums.commentcamarche.net/forum/affich-25769449-minecraft-serveur#1

      ... ton serveur sera lancé au démarrage (au même titre que ssh).

      Bonne chance
      0
    5. vivelesgrecs Messages postés 71 Statut Membre 4
       
      Bonjour maximiendo et désolé de revenir un peu tard.
      J'ai suivi le lien que tu m'as donné en remplacant bien tout les chemins de fichiers et en les remplaçants par le chemin des miens, je fait un reload daemon mais su je lance le service,il ne se passe rien...
      Merci d'avance,
      Vivelesgrecs
      0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Réponse courte

    C'est une mauvaise idée de définir un alias dans un script shell, mieux vaut écrire la commande non aliasés.

    Réponse détaillée

    Disons que tu parles de deux choses qui sont indépendants :
    - un alias est une manière de nommer une commande
    - ensuite lancer une script au démarrage c'est vague : au démarrage de linux ?

    Donc typiquement sous debian écrire dans /etc/rc.local permet de lancer des tâches au démarrage. Dedans tu écris un script shell, et tu finis par un
    exit 0
    . Ensuite j'imagine que rien n'empêche de définir un alias (même si ça ne se fait pas) et de l'utiliser dans ton script.

    Typiquement ce script :

    alias coucou="echo bonjour"
    coucou


    ... quand il est lancé, écrit bien "bonjour".

    Conclusion : c'est faisable !

    Mais il faut s'assurer que le shell qui invoque ton script au lancement (/etc/rc.local) est bien du bash (ou un shell qui comprend la directive "alias"), ce qui n'est pas garanti dans le cas général. C'est d'ailleurs pour ça qu'en général on évite les alias dans les scripts shell.

    La bonne nouvelle en tout cas, c'est que l'alias n'est pas maintenu (exporté) à la sortie du script.

    Bonne chance
    1
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Tu recopies simplement ton script dans /etc/rc.local. Tu peux ensuite le tester en lançant la commande :

    /etc/rc.local


    Bonne chance
    1
  4. vivelesgrecs Messages postés 71 Statut Membre 4
     
    merci beaucoup,
    dans mon fichier rc.local, je met quoi ?(en dehors de la commande) car il est vide.
    ensuite, le script shell, je le met ou ?
    merci d'avance.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. CorentinRoche Messages postés 287 Statut Membre 41
     
    Bonjour,
    tu peut aussi toute automatiser lors du démarrage de ta machine,

    En ajoutant la commande pour démarrer ton script dans le fichier .profiles
    de ton profiles :p

    voila

    cordialement
    Roche Corentin
    0
    1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
       
      Bonjour Corentin,

      Merci pour ta réponse, mais attention il faut distinguer deux choses :
      -
      /etc/profile
      est lu au démarrage d'un shell (d'un terminal)
      -
      /etc/rc.local
      est lu au démarrage de la même machine

      Ils n'agissent donc pas au même moment. En ce sens,
      /etc/profile
      ne répond pour moi pas à la question initialement posée.
      0
    2. CorentinRoche Messages postés 287 Statut Membre 41
       
      Ha oui effectivement, j'ai l'habitude de pas avoir d'interface graphique donc je passe forcement au démarrage du shell ..

      Merci pour l'info :p
      0
  7. vivelesgrecs Messages postés 71 Statut Membre 4
     
    merci a tous pour vos réponses.
    pour resumer, je doit donc mettre ma commande dans etc/init.d/rc.local ou dans ke fichier. profile.(je dit commande ca mon fichier shell se compose juste d'une commande).
    merci encore
    vivelesgrecs

    --
    0
    1. vivelesgrecs Messages postés 71 Statut Membre 4
       
      dans LE fichier
      je dit commande CAR
      dsl

      --
      0
    2. CorentinRoche Messages postés 287 Statut Membre 41
       
      Oui normalement cela devrai marcher :p

      bonne chance
      0
    3. vivelesgrecs Messages postés 71 Statut Membre 4
       
      bonjour,
      j'ai mis ma ligne de commande dans rc.local, j'ai exécuté le fichier, tout marche.
      mas si j’éteins la machine, le processus (qui est un screen) n'apparait pas après la commande screen -r et le serveur est inaccessible.
      voici mon fichier:
      cd && cd mc-server && sudo screen java -Xms512M -Xmx1024M -XX:MaxPermSize=128M $=128M -jar spigot.jar nogui

      merci d'avance,
      vivelesgrecs
      0
    4. CorentinRoche Messages postés 287 Statut Membre 41
       
      Sinon crée un script ou tu a les ligne de commande et lance le manuellement si jamais le server se ferme, tu sera obliger de le re-lancer a la main je pense :p


      cdl
      0
  8. vivelesgrecs Messages postés 71 Statut Membre 4
     
    Bonjour mamiemando,
    J'ai supprimé le cd mc-server puisque que je précise déjà le chemin du fichier qui est /home/minecraft/mc-server /spigot.jar.
    J'ai également enlevé le sudo mais pas le screen puisque j'ai besoin de pouvoir récupérer le terminal du serveur.
    sudo journalctl -xn donne ceci :

    -- Logs begin at lun. 2017-04-03 11:54:28 UTC, end at lun. 2017-04-03 17:07:26 UTC
    avril 03 17:07:23 raspberrypi systemd[1]: Starting LSB: minecraft server Descripti
    -- Subject: L'unité (unit) minecraft.service a commencé à démarrer
    -- Defined-By: systemd
    -- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
    --
    -- L'unité (unit) minecraft.service a commencé à démarrer.
    avril 03 17:07:23 raspberrypi minecraft[11708]: /etc/init.d/minecraft: 9: /etc/ini
    avril 03 17:07:23 raspberrypi minecraft[11708]: /etc/init.d/minecraft: 10: /etc/in
    avril 03 17:07:23 raspberrypi minecraft[11708]: /etc/init.d/minecraft: 11: /etc/in
    avril 03 17:07:23 raspberrypi systemd[1]: minecraft.service: control process exite
    avril 03 17:07:23 raspberrypi systemd[1]: Failed to start LSB: minecraft server De
    -- Subject: L'unité (unit) minecraft.service a échoué
    -- Defined-By: systemd
    -- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
    --
    -- L'unité (unit) minecraft.service a échoué, avec le résultat failed.
    avril 03 17:07:23 raspberrypi systemd[1]: Unit minecraft.service entered failed st
    avril 03 17:07:23 raspberrypi sudo[11687]: pam_unix(sudo:session): session closed
    avril 03 17:07:26 raspberrypi sudo[11719]: minecraft : TTY=pts/0 ; PWD=/home/minec
    avril 03 17:07:26 raspberrypi sudo[11719]: pam_unix(sudo:session): session opened



    et voici le dernier script :
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides: minecraft Required-Start: $remote_fs
    # Required-Stop: Default-Start: 2 3 4 5 Default-Stop:
    # Short-Description: minecraft server Description: minecraft
    # server
    ### END INIT INFO
    . /lib/lsb/init-functions [ -f /etc/default/rcS ] && .
    /etc/default/rcS PATH=/bin:/usr/bin:/sbin:/usr/sbin case
    "$1" in
      start)
            log_begin_msg "Starting minecraft server"
            screen java -Xms512M -Xmx1024M -XX:MaxPermSize=128M -jar /home/minecraft/$
            log_end_msg 0
            ;;
      stop)
            kill -9 $(ps -eo pid,cmd | grep java | grep
    spigot.jar | cut -d" " -f2)
            ;;
      force-reload|restart)
            $0 start
            ;;
      status)
            exit 0
            ;;
      *)
            log_success_msg "Usage: /etc/init.d/minecraft
    {start|stop|restart|force-reload|status}"
            exit 1 esac
    exit 0
    
    

    merci pour votre persévérance,
    vivelesgrecs
    0
    1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
       
      screen java -Xms512M -Xmx1024M -XX:MaxPermSize=128M -jar /home/minecraft/$


      Le $ me paraît suspect. Si tu as moyen de lancer directement ton ".jar" en tant que daemon, c'est mieux que screen. Si aucune de ces deux solutions ne marche tu peux essayer avec
      nohup
      :

      nohup java -jar myapp.jar &


      Quelle que soit la solution adopitée, il faut la tester au préalable dans une ligne de commande. Elle doit :
      1) se lancer correctement,
      2) rendre la main.

      Bonne chance
      0
    2. vivelesgrecs Messages postés 71 Statut Membre 4
       
      bonjour,
      nohup rend pareil.
      pour le $, c'est une erreur de copié collé, en réalité c'est /home/minecraft/mc-server/spigot.jar
      merci,
      vivelesgrecs
      0
    3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
       
      Mais du coup si ces commandes marchent (avec nohup ou screen), du coup ton serveur est lancé ?
      0
    4. vivelesgrecs Messages postés 71 Statut Membre 4
       
      screen marche dans mon alias du coup le serveur est lancé mais pas grâce au démon minecraft, je l'ai lancé manuellement.
      0
    5. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
       
      A priori rien n'empêche de lancer un service via
      nohup 
      depuis un script de démarrage, c'est d'ailleurs une solution que tu trouves couramment sur Internet. Et a priori je ne vois aucune raison pour laquelle
      screen
      ne serait pas dans ce cas.

      Si la commande que tu mets dans ce script marche en root, ton service devrait marcher. Peut-être que tu avais déjà une instance de ton serveur qui était lancée ?

      Tu pourrais tester ton script pas à pas en copiant collant les lignes avant $1 puis les lignes qui sont dans le bloc "start".

      Mais déjà dans ce que tu as copié collé je dirais qu'il manque au moins un retour à la ligne avant "case". Une erreur de syntaxe suffit à expliquer pourquoi ton script ne marche actuellement pas.
      0