Plugin Sauvegarde automatique de la map.

Gnaag

Aventurier
8 Janvier 2020
8
1
3
32
Hello,

J'ai installé depuis peu un serveur Minecraft 1.15.1 avec PaperMC #33 sur un VPS fonctionnant sous Debian.

Après avoir passé quelque temps à bidouiller les fichiers de conf pour avoir un résultat qui me semble convenable, je cherche maintenant à faire la chose suivante de manière automatique, chaque nuit :

  • Stop du serveur.
  • Backup externalisé de la carte (sur un Google Drive par exemple).
  • Start du serveur.

Actuellement j'exécute mon serveur via un screen détaché sous Debian avec un bash qui lance le .jar avec les flag souhaités.

Je ne trouve cependant pas de solution répondant à ce besoin étonnamment, avez-vous quelque chose à me conseiller ?
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonjour !

Pour ton problème, tu peux faire la chose suivante.

Pour eteindre ton serveur, je ne suis pas sur qu'un script puisse le faire tout seul, il te faut un plugin qui entrera "stop" dans la console de ton serveur. §On pourrait en soit utiliser un script mais l'arrêt du serveur ne serait pas propre et tu risquerai de perdre des données.

Pour la backup et le démarrage du serveur, tu peux utiliser une tache cron (tache automatisé sous Linux, c'est très simple d'utilisation, il te suffit de lire la doc en ligne ;) elle n''est pas longue). Avec ceci, tu devrait pouvoir t'en sortir ;)

AlexFatta
 

Gnaag

Aventurier
8 Janvier 2020
8
1
3
32
Hello,

Merci pour ton retour :)

Je vois bien le truc, j'aurai aimé avoir un plugin qui fait le tout mais apparemment c'est pas possible ^^

Tu aurais un plugin à me conseiller, au moins pour programmer les stop / start ? Le reste je le ferai avec un CRON
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187

Gnaag

Aventurier
8 Janvier 2020
8
1
3
32
Hello

J'espère qu'ils fonctionnent car apparemment ils n'ont pas été mis à jour depuis longtemps ^^

Merci pour ton aide :)
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Pour eteindre ton serveur, je ne suis pas sur qu'un script puisse le faire tout seul
Bien sur que si !

Bon alors il faut voir comment tu lance ton serveur... Si tu utilises screen, tmux, deamon, ... Ca c'est à toi de nous dire comment tu as fait sur ton VPN pour faire en sorte que le serveur ne soit pas attaché à ta console ssh.

Une fois qu'on saura cela, on pourra t'aider à faire en sorte qu'un petit script bash envoie la commande "stop" à cette console. Cela aura exactement le même effet que de faire un "stop" directement dans la console.
L'idée est donc bien d'utiliser une tache cron qui va lancer ce script. Dans ce même script (qui envoie la commande "stop"), on peut aussi directement mettre le sytème de backup et même le système de restart...


Cordialement,
Detobel36
 
  • J'aime
Reactions: Alex Fatta

Gnaag

Aventurier
8 Janvier 2020
8
1
3
32
Salut,


Bien sur que si !

Bon alors il faut voir comment tu lance ton serveur... Si tu utilises screen, tmux, deamon, ... Ca c'est à toi de nous dire comment tu as fait sur ton VPN pour faire en sorte que le serveur ne soit pas attaché à ta console ssh.

Une fois qu'on saura cela, on pourra t'aider à faire en sorte qu'un petit script bash envoie la commande "stop" à cette console. Cela aura exactement le même effet que de faire un "stop" directement dans la console.
L'idée est donc bien d'utiliser une tache cron qui va lancer ce script. Dans ce même script (qui envoie la commande "stop"), on peut aussi directement mettre le sytème de backup et même le système de restart...


Cordialement,
Detobel36

Actuellement j'utilise screen pour exécuter le serveur. J'y exécute mon start.sh qui lance le .jar puis je détache le screen avec CTRL + A puis CTRL + D.

Jusque là j'ai essayé la commande /restart de spigot pour tenter de le redémarrer manuellement avant d'essayer un redémarrage programmé. Le problème c'est que dans certains cas, le redémarrage n'aboutit pas car il me dit que le port configuré pour le serveur est déjà utilisé et quand je regarde la commande top, le processus java apparaît en double, indiquant que le premier serveur ne s'est pas entièrement arrêté j'ai l'impression. J'ai même tenté un sleep 15 pour lui laissé le temps de se couper correctement mais sans succès.
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Pour lancer ton serveur:
Bash:
screen -dmS MinecraftServer
Tu peux changer "MinecraftServer" par ce que tu veux, mais il faut rester cohérent avec le reste des commandes du coup ;)

Pour l'arrêter:
Bash:
screen -S MinecraftServer -X eval 'stuff \"stop\"\015'

Tu peux également forcé l'arrêt (mais c'est pas propre hein !):
Bash:
screen -X -S MinecraftServer quit

Ensuite, pour voir si le serveur est toujours allumé, normalement tu peux faire:
Bash:
pgrep -f spigot.jar > /dev/null
La aussi, il faut adapter "spigot.jar" par le ".jar" que tu lance :)

Ou également:
Bash:
screen -list | grep "MinecraftServer"
Et celui là, tu peux l'utiliser en mettant l'information dans une variable et en jouant avec une boucle...

Donc au final qqch comme ça:
Bash:
# Arrêter le serveur
screen -S MinecraftServer -X eval 'stuff \"stop\"\015'

# Vérifier le status
STATUS=`screen -list | grep "MinecraftServer"`
while [ "$STATUS" > /dev/null ]; do
    sleep 5
    STATUS=`screen -list | grep "MinecraftServer"`
done

# Faire le backup
cp -r world/  worldBackup/world1

# Redémarrer le serveur
screen -dmS MinecraftServer java -jar spigot.jar

Tu peux également rajouter un compteur dans le while pour mettre la commande de "quit" de screen après 10 tours de boucles par exemple (pour incrémenter une variable en bash: I=$((I+1))).


Cordialement,
Detobel36
 
  • J'aime
Reactions: Alex Fatta

Gnaag

Aventurier
8 Janvier 2020
8
1
3
32
Salut,

Pour lancer ton serveur:
Bash:
screen -dmS MinecraftServer
Tu peux changer "MinecraftServer" par ce que tu veux, mais il faut rester cohérent avec le reste des commandes du coup ;)

Pour l'arrêter:
Bash:
screen -S MinecraftServer -X eval 'stuff \"stop\"\015'

Tu peux également forcé l'arrêt (mais c'est pas propre hein !):
Bash:
screen -X -S MinecraftServer quit

Ensuite, pour voir si le serveur est toujours allumé, normalement tu peux faire:
Bash:
pgrep -f spigot.jar > /dev/null
La aussi, il faut adapter "spigot.jar" par le ".jar" que tu lance :)

Ou également:
Bash:
screen -list | grep "MinecraftServer"
Et celui là, tu peux l'utiliser en mettant l'information dans une variable et en jouant avec une boucle...

Donc au final qqch comme ça:
Bash:
# Arrêter le serveur
screen -S MinecraftServer -X eval 'stuff \"stop\"\015'

# Vérifier le status
STATUS=`screen -list | grep "MinecraftServer"`
while [ "$STATUS" > /dev/null ]; do
    sleep 5
    STATUS=`screen -list | grep "MinecraftServer"`
done

# Faire le backup
cp -r world/  worldBackup/world1

# Redémarrer le serveur
screen -dmS MinecraftServer java -jar spigot.jar

Tu peux également rajouter un compteur dans le while pour mettre la commande de "quit" de screen après 10 tours de boucles par exemple (pour incrémenter une variable en bash: I=$((I+1))).


Cordialement,
Detobel36

Wow tu m'as super bien aidé, merci c'est top !

J'ai juste apporté quelques modif car la commande "stop" n'était pas correctement interprétée, paper sépare le nether et l'ender du reste de la map et pour les flag de java, ce qui donne au final :

Bash:
#!/bin/sh

# Arrêter le serveur
screen -S MinecraftServer -X eval "stuff \"stop\"\015"

# Vérifier le status
STATUS=`screen -list | grep "MinecraftServer"`
while [ "$STATUS" > /dev/null ]; do
    sleep 5
    STATUS=`screen -list | grep "MinecraftServer"`
done

# Faire le backup
cp -r world1/  worldBackup/
cp -r world1_nether/  worldBackup/
cp -r world1_the_end/ worldBackup/

# Redémarrer le serveur
screen -dmS MinecraftServer java -Xmx1536M -Xms1536M -jar paper.jar nogui

Il ne me reste qu'à programmer l'exécution du script chaque nuit, je devrai réussir à m'en sortir je pense, encore merci pour votre aide !
 
  • J'aime
Reactions: Detobel36

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Fait attention a ton backup... Je pense que la il va chaque fois écrasé les fichiers dans "worldBackup"... Fait des tests pour être sur hein ;)
Et pour faire ça vraiment propre tu peux utiliser date ;)
Genre:
Bash:
TODAY=`date +%d-%m-%Y`
cp -r world1/ worldBackup/world1-$TODAY
Et tu peux même directement les compresser en utilisant tar ou zip :D

Pour programmer l'exécusion: crontab -e


N'hésites pas à mettre le préfixe "résolu" ;)


Cordialement,
Detobel36