Exécuter un alias au démarrage

Fermé
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 - 19 mars 2017 à 22:58
mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 - 9 avril 2017 à 23:05
Bonjour,
Tout est dans le titre: comment faire pour exécuter un alias linux au démarrage de la machine.
Merci d'avance,
Vivelesgrecs
A voir également:

7 réponses

mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 7 749
Modifié le 25 mars 2017 à 13:53
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
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
25 mars 2017 à 13:48
non, je voulais dire si j’éteins et je rallume
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017
25 mars 2017 à 13:49
Si tu éteins et que tu rallumes quoi ?
0
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
25 mars 2017 à 14:18
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
mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 7 749
26 mars 2017 à 16:36
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
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
1 avril 2017 à 10:18
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
mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 7 749
Modifié par mamiemando le 20/03/2017 à 00:25
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
mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 7 749
20 mars 2017 à 10:00
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
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
20 mars 2017 à 05:39
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
22 mars 2017 à 12:27
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
mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 7 749
23 mars 2017 à 09:46
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
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
23 mars 2017 à 09:54
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
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
22 mars 2017 à 23:05
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
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
22 mars 2017 à 23:13
dans LE fichier
je dit commande CAR
dsl

--
0
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
23 mars 2017 à 08:22
Oui normalement cela devrai marcher :p

bonne chance
0
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
25 mars 2017 à 12:46
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
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
27 mars 2017 à 08:48
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
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
3 avril 2017 à 19:16
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
mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 7 749
4 avril 2017 à 10:24
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
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
4 avril 2017 à 12:01
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
mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 7 749
5 avril 2017 à 09:48
Mais du coup si ces commandes marchent (avec nohup ou screen), du coup ton serveur est lancé ?
0
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
5 avril 2017 à 14:16
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
mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 7 749
Modifié le 6 avril 2017 à 15:31
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