Configuration Résolu Démarrer le serveur automatiquement au reboot de la machine.

yopley56

Bucheron
19 Mars 2017
19
1
14
28
Bonjour,

Cela fait plusieurs heures que je cherche un moyen pour redémarrer le serveur au reboot de la machine mais rien ne fonctionne...
Je sais démarrer le serveur manuellement à partir d'un script qui se nomme launch.sh dont voici le contenu :


#!/bin/bash
java -server -Xmx5G -Xms5G -XX:+UseThreadPriorities -XX:+DisableExplicitGC -Djline.terminal=jline.UnsupportedTerminal -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:+CMSParallelRemarkEnabled -XX:MaxGCPauseMillis=50 -XX:TargetSurvivorRatio=90 -XX:parallelGCThreads=2 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+StartAttachListener -Xincgc -jar spigot.jar nogui

Mais automatiquement rien ne se passe.

J'ai placé ce script dans le dossier init.d, je l'ai ensuite relié au dossier rc2.d comme il a été conseillé sur un site d'aide grâce à la commande ln -s /etc/init.d/launch.sh /etc/rc2.d/S40launch.sh.

J'ai effectué les commandes :

chmod +x launch.sh
update-rc.d launch.sh defaults
update-rc.d -f start 99 2 3 4 5 launch.sh
chmod a+x /etc/init.d/launch.sh


Je me suis aussi servis du crontab -e pour y mettre :

42 16 * * * /sbin/reboot -h now
@reboot /etc/init.d/launch.sh


Mais voilà le serveur ne veut toujours pas redémarrer :(
Je suis totalement perdu, je sais plus quoi faire là.
J'ai vu des solutions qui se servaient du dossier rc.local mais je ne l'ai pas donc comme ça c'est réglé '-' ..
Si quelqu'un peut me venir en aide je lui en serai très reconnaissant :3

Ps : J'utilise Debian 9
 

Falbak

Architecte en herbe
22 Février 2019
9
8
63
Salut à toi,

Voici ce que j'ai réalisé sur mon serveur, sous Debian 9.7 . Les commandes diffèrent, car le rc.d c'est plutôt pour les version 8, 7, 6 ... de Debian

En premier lieu arrête ton serveur. Si tu veux essayer avec mon système qui suit :

#Création du fichier de service
nano /etc/systemd/system/minecraft_srv.service


#Contenu de ce fichier, remplace les chemins, utilisateurs qui executera le serveur minecraft etc... par ta configuration à toi. Ils sont balisés par des *** ***
Code:
[Unit]
Description=****Mon Serveur Minecraft***
After=network.target

[Service]
WorkingDirectory=****/home/utilisateur/serveur/spigot/****

User=***minecraft***
Group=***minecraft***

Restart=always

ExecStart=/usr/bin/screen -DmS minecraft /usr/bin/java -Xmx5G -Xms5G -XX:+UseThreadPriorities -XX:+DisableExplicitGC -Djline.terminal=jline.UnsupportedTerminal -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:+CMSParallelRemarkEnabled -XX:MaxGCPauseMillis=50 -XX:TargetSurvivorRatio=90 -XX:parallelGCThreads=2 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+StartAttachListener -Xincgc -jar spigot.jar nogui

ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say ARRET DANS 15 SECONDES..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say ARRET DANS 10 SECONDES..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say ARRET DANS 5 SECONDES..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "save-all"\015'
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "stop"\015'

[Install]
WantedBy=multi-user.target


#En gros, quand tu souhaite démarrer le serveur ou suite à un redémarrage de ta machine, il va executer le "ExecStart"
#Si tu lance un arrêt du serveur (via la commande "systemctl stop minecraft_srv"), il va envoyer un message sur le serveur pour prévenir l'arrêt, lancer une sauvegarde puis couper le serveur minecraft.
#Autre élément, on le lance ici en screen. Ca va te permettre d'aller voir ta console via la commande "screen -x minecraft". Si tu veux passer des commandes, c'est plutôt pratique.


#On sauvegarde, puis on va activer le service :
systemctl daemon-reload
systemctl enable minecraft_srv

#On démarre le serveur minecraft
systemctl start minecraft_srv

#On vérifie que tout fonctionne
systemctl status minecraft_srv

Quand ta machine redémarrera, il lancera automatiquement le service appelé minecraft_srv. (C'est la commande systemctl enable minecraft_srv qui l'a activé au démarrage)

Voili voilou, ça me donne envie de faire un site de tuto tout ça x)
 
  • J'aime
Reactions: yopley56

yopley56

Bucheron
19 Mars 2017
19
1
14
28
Wow ! Merci beaucoup c'est exactement ce que j'attendais comme explications !
En plus tu m'expliques comment lancer le screen avec c'est parfait ^^ !

Je dois me rendre au boulot bientôt donc je pourrais tester que demain ;)
Ca fait une dizaine d'heures que je cherche comment faire et je vois que j'étais plutôt loin du but haha !
Merci beaucoup ! Je te tiens au courant du résultat :D
 

yopley56

Bucheron
19 Mars 2017
19
1
14
28
Salut Falbak !

Avant de faire tes manipulations, je tiens à dire que j'ai réinstallé le serveur pour tous refaire au propre et éviter une erreur bête mais lorsque je fais ce que tu m'as dit, j'obtiens cette erreur suite à la commande "systemctl status minecraft_srv" :
upload_2019-2-21_17-20-33.png


Voici le contenu de /home/herobrix/server/launch.sh :
upload_2019-2-21_17-25-0.png


Et voici le contenu de /etc/systemd/system/minecraft_srv.service :


En pensant que ça venait des permissions, j'ai effectué les commandes :
chmod a+x /etc/systemd/system/minecraft_srv.service
chmod a+x /home/herobrix/server/launch.sh

Enfin voici le fichier launch.sh où tu peux voir que j'ai bien la permission d’exécuter :


Et le contenu de chemin /etc/system/system dont je me pose des questions quant au fichier .minecraft_srv.service.swp :


Voilà, dès fois que tu saurais d'où vient le problème :/
Sinon merci de m'avoir permis d'approcher du but ;)
 

Falbak

Architecte en herbe
22 Février 2019
9
8
63
Salut yopley56,

Attention, dans le script du service (donc /etc/systemd/system/minecraft_srv.service) , la ligne "WorkingDirectory" est l'emplacement du dossier où il va faire ses actions.
Dans ton cas, il s'agirait donc de : /home/herobrix/server/ (au lieu de /home/herobrix/server/launch.sh)
Une fois modifié, fait un "systemctl daemon-reload" pour recharger la configuration.

Concrètement, pour l'explication, c'est le ou les ExecStart qui execute soit une commande (donc la la commande java pour lancer le serveur spigot en screen), soit un script.


Le script launch.sh n'a pas lieu d'exister car c'est la commande : "systemctl start minecraft_srv" qui va executer le service (le fameux ExecStart).
Il doit être lancé en root, le serveur se lancera bien sous l'utilisateur herobrix.
(Si tu souhaites lancer la commande en tant qu'herobrix, il faut installer sudo et donner les droits de cette commande à herobrix, si tu souhaites le faire, je peux te guider).

Si tu souhaites tout de même avoir un script à lancer, tu n'aura juste à mettre la commande pour start.


Je vais m'absenter mais je repasse ce soir.

Autre chose, si tu as réinstallé le serveur vérifie aussi si screen est bien installé (il me semble que de base, il n'y est pas, donc "apt-get install screen")

Pour le fichier minecraft_srv.service.swp, je pense que l'editeur de texte (nano ou vi) est encore lancé, ou s'est planté (dans ce cas, c'est un résidu qui peut être supprimé).

En espérant que ça puisse t'aider :)
 
  • J'aime
Reactions: yopley56

yopley56

Bucheron
19 Mars 2017
19
1
14
28
Alors maintenant il y a moins d'erreurs mais ce n'est pas encore ça ^^' ! On y est presque :3
Voici l'erreur :


Tout à la fin on peut apercevoir 'exit-code' et ça m'est souvenu qu'en regardant quelques tutoriels, certaines personnes ajoutaient "Exit 0" à la fin de leur script, ce que j'ai donc fait tout au bout de la ligne ExecStart mais ça n'a rien donné..

Concernant les permissions à ajouter à l'utilisateur herobrix, je devrais pouvoir m'en sortir tout seul (normalement) x)
 
Dernière édition:

Falbak

Architecte en herbe
22 Février 2019
9
8
63
Le "exit 0;" c'est pour renvoyer un retour à un script (0 pour dire OK, ça s'est bien lancé).
Etant ici un service, il faut éviter, ça pourrait couper le service dès lors qu'il se lance.


Essaye de lancer à nouveau le service via "systemctl start minecraft_srv"
Il te refera l'erreur, mais après tape la commande : "journalctl -xe"
Et fait une capture de ce journal (pour le quitter, juste appuyer sur "q"). Il peut donner des infos utiles sur l'origine du problème.


Autre manipulation à faire (pour tester car il doit y avoir un truc qui l’empêche de démarrer, plus qu'à trouver quoi).
Remplace le ExecStart par ça :
ExecStart=/usr/bin/screen -DmS herobrix /usr/bin/java -Xmx2G -jar spigot.jar nogui

Enregistre.

Ton spigot.jar est bien situé dans "/home/herobrix/server/" ?
J'imagine que Screen est installé.


Après est-ce que tu utilise vi ou nano pour modifier ce fichier ou tu es passé sur Windows via PsPAd, Notepad++, bloc-note ...?

Si tu est passé par Windows pour créer/modifier le fichier, un détail à vérifier c'est que le fichier est en format Unix.
(Si fait via Notepad++, en bas à droite du logiciel ça devrait être écrit : Windows (CR LF), dans ce cas, faire en haut à gauche Edition > Convertir les sauts de lignes > Convertir au format Unix . Puis enregistrer)


Faire la commande "systemctl daemon-reload" pour recharger le service

Tenter de lancer le service avec "systemctl start minecraft_srv" et croiser les doigts.
(Le serveur se lancera avec 2G de ram en limite, mais sans tes autres paramètres)
S'il se lance sans erreur, le problème est situé dans le ExecStart (celui d'avant avec tous les paramètres comme la limitation à 5G, mise en priorité etc...)


On finira par mettre la main sur cette erreur, car normalement au final si tout est lancé, le service doit ressembler à ceci : (active (running))

1550951651-ok-srv-mc.png


Ça commence à faire beaucoup de choses que je te demande :/
 

yopley56

Bucheron
19 Mars 2017
19
1
14
28
HAHA CA FONCTIONNE !!

Le problème venait du ExecStart, je l'ai donc remplacé par ce que tu m'as dit :D

Je te remercie beaucoup d'avoir pris du temps pour m'aider :3 !!
 
  • J'aime
Reactions: Falbak

yopley56

Bucheron
19 Mars 2017
19
1
14
28
Il y a juste le screen qui ne se lance pas.
Lorsque je fais screen -x herobrix, ça me met "There is no screen to be attached matching herobrix."

Et lorsque je fais screen -r, ça me met :

1940.pts-0.huminecraft-survie-saison-04-dveloppement (02/23/2019 10:11:10 PM) (Attached)