[SERVEUR]Ecrire dans le screen de minecraft pour le sauvegarder
Quand on démarre un serveur Minecraft sur linux, on à juste à taper une commande pour lancer le serveur. Il y a rien de plus simple, mais quand on ferme le terminal, qu’est ce qu’il se passe ? Le serveur Minecraft s’arrête, c’est assez embêtant.
Pour régler ce léger problème, on utilise screen qui va laisser tourner le serveur même le terminal fermé:
apt-get install screen
Quelques bases de screen:
Pour lister les screen déjà ouvert, on tape:
screen -ls
Pour en rejoindre un:
screen -r Le_nom_du_screen
Ou le petit nombre avant le nom du screen.
Et pour en créer un:
screen -S Le_nom_du_screen_à_créer
Pour un script de sauvegarde je voulais donc écrire dans le screen ou tourne minecraft sans y rentrer pour écrire dans le chat que le serveur allait s’arrêter pour la sauvegarde… et taper des commandes comme le save-all… et ensuite le redémarrer.
Mais comment faire ? Car dans toutes mes recherches, je n’ai pratiquement jamais trouvé comment le faire en ligne de commande sans rentrer dans le screen(ou alors j’ai mal chercher)
Voici des exemples:
screen -rd minecraft -X -p0 eval "stuff 'say Attention, un message important va suivre.'^m" sleep 1 screen -rd minecraft -X -p0 eval "stuff 'say Il est lheure de la sauvegarde du serveur.'^m" screen -rd minecraft -X -p0 eval "stuff 'say Le serveur reboot dans quelques secondes, cela va prendre plusieurs minutes(max 5) avant de le redémarrer.'^m" sleep 1 screen -rd minecraft -X -p0 eval "stuff 'say Merci de votre compréhension.'^m" screen -rd minecraft -X -p0 eval "stuff 'save-all'^m" sleep 1 screen -rd minecraft -X -p0 eval "stuff 'say Début du compte à rebours...'^m" sleep 1 screen -rd minecraft -X -p0 eval "stuff 'say 5...'^m" sleep 1 screen -rd minecraft -X -p0 eval "stuff 'say 4...'^m" sleep 1 screen -rd minecraft -X -p0 eval "stuff 'say 3...'^m" sleep 1 screen -rd minecraft -X -p0 eval "stuff 'say 2...'^m" sleep 1 screen -rd minecraft -X -p0 eval "stuff 'say 1...'^m" sleep 1 screen -rd minecraft -X -p0 eval "stuff 'say 0...'^m" screen -rd minecraft -X -p0 eval "stuff 'say Arrêt...'^m" sleep 1 screen -rd minecraft -X -p0 eval "stuff 'stop'^m"
Dans ces exemples, j’écris plusieurs messages dans le chat espacé d’une seconde grace à sleep et à la fin un petit compte à rebours et j’arrête le serveur. Ensuite il reste plus qu’à sauvegarder les fichiers et le redémarrer chez moi c’est:
screen -rd minecraft -X -p0 eval "stuff 'java -Xms512M -Xmx512M -jar spigot-1.7.10-R0.1-SNAPSHOT.jar nogui'^m"
Il y a que deux choses à modifier:
le nom du screen: ici minecraft
la commande à exécuter: message dans le chat, save-all, stop ou la commande pour le démarrer…
Il vaut donc mieux attendre quelques secondes de plus par sécurité pour envoyer la commande.
A titre informatif, je le fais avec minecraft, mais ça fonctionne peut être de la même manière pour d’autres programmes qui tourneraient dans un screen. Je n’ai pas testé.
Tous les codes sont testés et sont fonctionnels, si il arrive qu'un de ces codes ne fonctionne pas chez vous, merci de me le signaler.