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

Falbak

Architecte en herbe
22 Février 2019
9
8
63
Ravi que ça fonctionne.

Concernant le screen, si le ExecStart a ce début : /usr/bin/screen -DmS herobrix
Ce devrait être justement herobrix.

Hors la dans ton cas, ça fonctionnera si tu tape "screen -x huminecraft-survie-saison-04-dveloppement" ou "screen -x 1940"

Si tu as changé le nom dans le service en : /usr/bin/screen -DmS huminecraft-survie-saison-04-dveloppement ?
Sinon, je n'ai pas d'explication vu qu'il est spécifié nul part dans le service.

Pour l'ouverture du screen, vu qu'il s’exécute avec l'utilisateur herobrix, le screen -x ou screen -r doivent être fait sous cet utilisateur.

 
  • J'aime
Reactions: yopley56

yopley56

Bucheron
19 Mars 2017
19
1
14
28
Ah c'est bon ça fonctionne aujourd'hui, j'ai simplement fait "screen -r". Je ne sais pas ce qu'il y a eu hier ^^'
Effectivement, possible que j'ai essayé de faire cette commande en étant en root.

Bref une dernière chose après j'arrête de t'embêter >.< !
Je pensais être capable de donner les droits à l'utilisateur herobrix d'exécuter le script mais non.
J'ai voulu sous cet utilisateur me rendre dans le fichier minecraft_srv.service : cd /etc/systemd/system/minecraft_srv.service mais ça me met
bash: cd: /minecraft_srv.service: No such file or directory.

Certainement parce que je n'y ai pas les droits puisque sous l'utilisateur root j'y arrive. Mais dans ce cas comment je peux donner les droits à herobrix si je ne peux même pas m'y rendre ?
Car je pensais effectuer cette commande : chmod 777 minecraft_srv.service.

Et c'est plutôt urgent que je puisse le lancer depuis cet utilisateur car sur mon autre serveur "officiel" lorsque je lance le script start.sh en root, ça corrompt la map et il y a de forte chance que ça le fasse aussi une fois que j'aurais installé le nouveau script sur celui-ci. Alors peut-être que c'est parce que j'y ai installé un disque supplémentaire et que je l'ai mal configuré, pour être honnête je n'ai pas été cherché le pourquoi du comment, là n'est pas le sujet de toute façon ^^

Enfin, j'aimerais redémarrer la machine toutes les 4 heures. Pour cela je me sers de la commande crontab -e.
Le redémarrage de la machine et du serveur se font correctements mais j'aimerais avant chaque redémarrage de la machine, arrêter le serveur pour que ce soit le plus propre possible sauf que en regardant les logs je vois cette erreur qui s'affiche lors de la fermeture :

[Server console handler/ERROR]: Exception handling console input
java.io.IOException: Input/output error
at java.io.FileInputStream.readBytes(Native Method) ~[?:1.8.0_181]
at java.io.FileInputStream.read(FileInputStream.java:255) ~[?:1.8.0_181]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[?:1.8.0_181]
at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[?:1.8.0_181]
at org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:169) ~[spigot.jar:git-Spigot-e5e5c7c-6430d9c]
at org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:137) ~[spigot.jar:git-Spigot-e5e5c7c-6430d9c]
at org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:246) ~[spigot.jar:git-Spigot-e5e5c7c-6430d9c]
at org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:261) ~[spigot.jar:git-Spigot-e5e5c7c-6430d9c]
at org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:198) ~[spigot.jar:git-Spigot-e5e5c7c-6430d9c]
at org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readCharacter(ConsoleReader.java:2145) ~[spigot.jar:git-Spigot-e5e5c7c-6430d9c]
at org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLine(ConsoleReader.java:2349) ~[spigot.jar:git-Spigot-e5e5c7c-6430d9c]
at net.minecraft.server.v1_13_R2.DedicatedServer$2.run(DedicatedServer.java:91) [spigot.jar:git-Spigot-e5e5c7c-6430d9c]
[12:18:16] [Thread-3/INFO]: Stopping server


Il y aurait moyen de l'arrêter avec la commande stop sur le screen ?

J'espère que ce sujet sera facilement trouvable par toutes les futures personnes qui seront dans le même cas que moi parce que t'as été super efficace dans tes explications, merci :)
 
Dernière édition:

Falbak

Architecte en herbe
22 Février 2019
9
8
63
J'ai voulu sous cet utilisateur me rendre dans le fichier minecraft_srv.service : cd /etc/systemd/system/minecraft_srv.service mais ça me met
bash: cd: /minecraft_srv.service: No such file or directory.

La commande cd permet de se rendre dans un répertoire et non un fichier. Tu peux faire :
cd /etc/systemd/system/
cat minecraft_srv.service (pour visualiser) OU nano minecraft_srv.service (pour modifier)




Certainement parce que je n'y ai pas les droits puisque sous l'utilisateur root j'y arrive. Mais dans ce cas comment je peux donner les droits à herobrix si je ne peux même pas m'y rendre ?
Car je pensais effectuer cette commande : chmod 777 minecraft_srv.service.

Il n'est pas utile de faire ça, car ce n'est pas un script mais un service. Pour donner des droits, c'est différent.
En lançant le systemctl start minecraft_srv, le serveur se lancera bien avec l'utilisateur herobrix. (Car dans le fichier service tu as indiqué sur la ligne User=herobrix)

Si tu veux le mettre en crontab -e avec l'utilisateur herobrix, ou lancer la commande via herobrix, il faut dans ce cas donner des droits d’exécution via sudo.

Pour ça :
apt-get install sudo
visudo


Un editeur de texte s'ouvre (préfère nano s'il le demande).
On va autoriser le démarrage/arrêt/relance/status du service + lancer un reboot avec ton utilisateur herobrix :
Rempli comme ce qui suit, à l'endroit où il y a les #xxxxxxxx

Code:
# Cmnd alias specification
Cmnd_Alias HEROBRIX_CMDS = /bin/systemctl start minecraft_srv, /bin/systemctl stop minecraft_srv, /bin/systemctl restart minecraft_srv, /bin/systemctl status minecraft_srv, /sbin/reboot


# User privilege specification
herobrix   ALL=NOPASSWD: HEROBRIX_CMDS

Dorénavent, tu peux te connecter avec ton utilisateur herobrix et lancer les commandes suivantes :
- sudo systemctl start minecraft_srv (démarre le serveur spigot)
- sudo systemctl stop minecraft_srv (arrête le serveur spigot)
- sudo systemctl restart minecraft_srv (relance le serveur spigot)
- sudo systemctl status minecraft_srv (pour afficher l'état du serveur)
- sudo reboot (pour relancer la machine)



Enfin, j'aimerais redémarrer la machine toutes les 4 heures. Pour cela je me sers de la commande crontab -e.
Le redémarrage de la machine et du serveur se font correctements mais j'aimerais avant chaque redémarrage de la machine, arrêter le serveur pour que ce soit le plus propre possible sauf que en regardant les logs je vois cette erreur qui s'affiche lors de la fermeture

Il y aurait moyen de l'arrêter avec la commande stop sur le screen ?

Oui.
Attention, ce qui suit, je parle de redémarrer la machine ! (Donc arrêter le serveur minecraft puis redémarrer la machine).
On va se baser sur le système sudo pour autoriser le reboot via l'utilisateur herobrix.

Tu peux faire un script comme celui-ci par exemple (imaginons que le script s’appelle reboot_machine.sh) :

Code:
#!/bin/bash

#On avertit les joueurs que le serveur va se couper
/usr/bin/screen -p 0 -S herobrix -X eval 'stuff "Attention : Le serveur va se relancer dans 30 secondes."\015'
#On met en pause le script 30 secondes
sleep 30
#On arrête le serveur minecraft puis on met le script en pause 5 secondes.
/usr/bin/screen -p 0 -S herobrix -X eval 'stuff "stop"\015'
sleep 5

#On redémarre la machine
sudo /sbin/reboot

Depuis le début j'ai utilisé herobrix mais si tu l'as changé, il faut faire la modif ici aussi (...0 -S ICI -X eval....)

On créer ensuite la tâche planifiée.
Sous l'utilisateur herobrix :
crontab -e

Mettre cette ligne (pour reboot toutes les 4 heures) :
Code:
0 */4 * * * /chemin_du_script/reboot_machine.sh
 

yopley56

Bucheron
19 Mars 2017
19
1
14
28
J'étais en train de faire ces manipulations mais je me suis rendu compte qu'à chaque fois que je stop le serveur avec la commande stop, celui-ci redémarre automatiquement.
Je suis obligé d'effectuer la commande systemctl stop minecraft_srv.service pour l'arrêter une bonne fois pour toute :/
D'ailleurs même après avoir passé les droits à herobrix, je n'ai pas pu effectuer cette commande mais j'ai quand même réussis à faire systemctl status minecraft_srv.service. Bizarre x))

Voici ce que contient visudo :


Voici les erreurs de permissions lorsque j'essaie d'entrer la commande systemctl stop minecraft_srv.service :


Voici le contenu de systemctl minecraft_srv.service :


Un collègue me dit que ce serait peut-être à cause de la ligne Restart=always, est-ce le cas ?

Enfin, le script ne veut pas se lancer avec crontab, voici son contenu :


Si je fais une pause de 15 minutes c'est pour être sûr que toutes les maps s'arrêtent correctement car sur mon serveur la map du nether met toujours une dizaine de minutes pour s'arrêter.
Après la map overword fait plus de 30Go donc c'est peut-être ça.

Et le contenu du crontab (j'ai fait le même en utilisateur root et herobrix pour tester sur les deux mais rien) :
 

Fichiers joints

  • upload_2019-2-24_8-35-31.png
    upload_2019-2-24_8-35-31.png
    40.7 KB · Affichages: 328
Dernière édition:

Falbak

Architecte en herbe
22 Février 2019
9
8
63
J'étais en train de faire ces manipulations mais je me suis rendu compte qu'à chaque fois que je stop le serveur avec la commande stop, celui-ci redémarre automatiquement.

Un collègue me dit que ce serait peut-être à cause de la ligne Restart=always, est-ce le cas ?


Ah possible, tu peux mettre la ligne
Restart=on-failure (le serveur redémarrera qu'en cas de problème de crash (mais je n'ai pas testé))
ou
Restart=no (dans ce cas, quoi qu'il arrive, le serveur ne redémarrera pas tout seul)

Si tu fais une modification du service, n'oublie pas de lancer la commande : systemctl daemon-reload

Je suis obligé d'effectuer la commande systemctl stop minecraft_srv.service pour l'arrêter une bonne fois pour toute :/
D'ailleurs même après avoir passé les droits à herobrix, je n'ai pas pu effectuer cette commande mais j'ai quand même réussis à faire systemctl status minecraft_srv.service. Bizarre x))

Quand tu es en root, c'est la commande : systemctl stop minecraft_srv.service (donc comme d'habitude)

Quand tu est sur ton utilisateur herobrix, il faut rajouter sudo devant la commande pour dire que tu passe par les permissions du sudoers.
Il faut que tu tape la commande : sudo systemctl stop minecraft_srv.service




Enfin, le script ne veut pas se lancer avec crontab


Si je fais une pause de 15 minutes c'est pour être sûr que toutes les maps s'arrêtent correctement car sur mon serveur la map du nether met toujours une dizaine de minutes pour s'arrêter.
Après la map overword fait plus de 30Go donc c'est peut-être ça.

Et le contenu du crontab (j'ai fait le même en utilisateur root et herobrix pour tester sur les deux mais rien)

Possible qu'il n'ait pas les droits d’exécution sur ce script.
Tu peux faire un chmod +x /home/herobrix/server/reboot_machine.sh
Puis retenter le crontab de l'utilisateur herobrix

Le crontab en root ne passera pas car pour passer les commandes en screen pour envoyer le message et faire le stop, il a besoin de passer par l'utilisateur herobrix.
 
  • J'aime
Reactions: yopley56

yopley56

Bucheron
19 Mars 2017
19
1
14
28
Ca devient bon haha !
Concernant le problème du serveur qui redémarrait suite à la commande stop j'ai simplement retiré la ligne de commande Restart=always. Au début j'avais testé de remplacer par Restart=on-failure mais le serveur redémarrait quand même ^^

Pour le script qui ne voulait pas se lancer depuis le crontab, j'ai fait comme tu m'as dit de faire, entrer la commande chmod +x /home/herobrix/server/reboot_machine.sh et ça fonctionne :) !

Plus que le problème qui ne me permet pas de lancer ou faire quoi que ce soit avec le script sous l'utilisateur herobrix, voici l'erreur :


A part ça, tout a l'air niquel, je ferais des tests plus poussés dès demain et je te tiens au courant :D

Encore merci <3
 

Falbak

Architecte en herbe
22 Février 2019
9
8
63
Ah oui, j'ai omis un élément.

Sous root, refait la commande visudo

j'ai oublié de noter .service à la fin de chaque éléments de minecraft_srv


En gros, il faudrait remplacer cette ligne :
# Cmnd alias specification
Cmnd_Alias HEROBRIX_CMDS = /bin/systemctl start minecraft_srv, /bin/systemctl stop minecraft_srv, /bin/systemctl restart minecraft_srv, /bin/systemctl status minecraft_srv, /sbin/reboot


Par
# Cmnd alias specification
Cmnd_Alias HEROBRIX_CMDS = /bin/systemctl start minecraft_srv.service, /bin/systemctl stop minecraft_srv.service, /bin/systemctl restart minecraft_srv.service, /bin/systemctl status minecraft_srv.service, /sbin/reboot


Suite à ça, tout devrait être niquel sur ton utilisateur herobrix.
 
  • J'aime
Reactions: yopley56

yopley56

Bucheron
19 Mars 2017
19
1
14
28
Parfait tout a l'air de fonctionner à présent, je te remercie beaucoup :D !

Juste une question, à quoi sert la ligne de commande
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "save-all"\015'
que tu m'as dit de mettre dans le script minecraft_srv.service ?

Au début je pensais que ça copié/collé le serveur dans un dossier mais après vérification, je ne vois aucun dossier de ce genre. Ce qui m'arrange en partie car sauvegarder une map de 30Go toutes les quatres heures c'est long et ça peut vite devenir coûteux ^^' !

En tout cas je compte mettre en place une sauvegarde automatique du serveur au moins une fois par jour, je ne sais pas encore comment m'y prendre mais je vais d'abord effectuer des recherches de mon côté avant d'ouvrir un nouveau sujet.

PS : Tu travailles dans le domaine de l'administration système ? Parce que t'as l'air de t'y connaître vachement ^^ !
 

Falbak

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

Cette ligne est là juste pour exécuter la commande /save-all dans la console minecraft.
Ceci pour sauvegarder la carte, items, position des joueurs etc.. avant de couper le serveur minecraft. (Mais finalement, je crois que le stop le fait également)

Ce n'est pas pour faire un copier/coller ailleurs des fichiers du jeu.

Ok d'acc, concernant ça, pour ma part j'ai un crontab qui me fait un zip du serveur et le déplace sur une autre machine (qui peut être ftp, rsync etc...).
Si ça peut te donner quelques idées.


Gagné :D je bosse en partie dans l'administration systèmes.
 
  • J'aime
Reactions: yopley56

yopley56

Bucheron
19 Mars 2017
19
1
14
28
Sauvegarder sur une autre machine, bonne idée ^^ !
Je vais me renseigner là-dessus.

Maintenant je pense que je peux clore ce sujet, merci beaucoup pour ton aide !! Je pense que ça aidera beaucoup d'autres personnes :D