Plugin Sauvegarde automatique de la map.

Gnaag

Aventurier
8 Janvier 2020
8
1
3
32
Hello,

Merci pour ton retour.

Avant d'ajouter la date, j'ai tenté d'ajouter une programmation mais bien que les backups se faisaient correctement, le start du serveur créait un screen mais celui-ci se terminait quelque secondes après, je n'ai pas su trouver pourquoi. J'ai adapté le script pour mettre des chemins absolus partout, mais sans succès :

Code:
#!/bin/sh

TODAY=`date +%d-%m-%Y`

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

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

# Faire le backup
cp -r /opt/minecraft/papermc/world1/  /opt/minecraft/papermc/worldBackup/$TODAY
cp -r /opt/minecraft/papermc/world1_nether/  /opt/minecraft/papermc/worldBackup/$TODAY
cp -r /opt/minecraft/papermc/world1_the_end/ /opt/minecraft/papermc/worldBackup/$TODAY

Maintenant comme on peut le voir, j'ai aussi ajouté la date pour la création du backup et pour le moment, je le test en manuel. Le dossier avec la date se crée bien, mais je ne comprends pas pourquoi j'obtiens à l'intérieur de celui-ci :

  • Le contenu du dossier world1/.
  • Le dossier world1_nether/.
  • Le dossier world1_the_end/.

Donc au lieu d'avoir cette forme :

world1
world1_nether
world1_the_end

j'obtiens celle-ci :

advancements
data
datapacks
level.dat
level.dat_old
playerdata
poi
region
session.lock
stats
uid.dat
world1_nether
world1_the_end

Tout ce qui précède les dossiers world1_nether et world1_the_end concerne le contenu du dossier world1 alors que j'aurai aimé avoir le dossier lui-même. Pourtant la commande cp est la même dans le script, je comprends pas bien pourquoi.

Si tu as une idée, je prends ^^

Encore merci pour le temps consacré à ce post :)
 

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,

le start du serveur créait un screen mais celui-ci se terminait quelque secondes après
Wait, tu parles du screen créé par le script ci-dessus ?

As-tu des erreurs dans tes logs ?

Pour le backup c'est totalement normal...
cp -r test/ test2/
Va copier le contenu du dossier "test" pour dans un nouveau dossier "test2".
Donc pour toi il suffit de faire:
Code:
cp -r /opt/minecraft/papermc/world1/  /opt/minecraft/papermc/worldBackup/$TODAY/world1


Je te conseil également de faire une variable qui permet d'avoir le chemin absolu plutôt que de devoir le taper à chaque fois... :/


Cordialement,
Detobel36
 

Gnaag

Aventurier
8 Janvier 2020
8
1
3
32
Hello,

Bon, c'est ok pour l'exécution du script en manuel, l'arborescence est ok merci !

Pour le CRON, je parle bien du screen créé par le script en effet. J'ai tenté de suivre quelque conseils sur le net pour récupérer des logs mais à chaque fois je n'ai rien de concret (je vois juste la tache exécutée en fait dans le fichier de log, pas d'erreur).

Je vais retenté la programmation du script mais en attendant si tu peux m'aiguiller pour savoir ou trouver/générer/activer les logs, je suis preneur.

EDIT :
J'ai remis en place rapidement un test de programmation avec la commande suivante :

Code:
sudo crontab -e

J'ai ensuite ajouté :

Code:
15 14 * * * /opt/minecraft/papermc/restartBackup.sh

Pour exécuter volontairement le fichier à 14h15. J'ai ensuite fait, sans trop savoir si c'était nécessaire :

Code:
service cron restart

Au moment voulu, le serveur a bien été stop (j'ai vu en live le serveur se stopper proprement), le screen s'est terminé, le backup s'est bien déroulé, mais le serveur n'a pas été redémarré.

J'ai spam la commande suivante pour réussir à aller dans le nouveau screen créé par le script :

Code:
screen -r

J'ai bien réussi à m'y rendre mais le screen s'est terminé au bout d'environ 3 secondes.

Au niveau des logs, si je fais cette commande :

Code:
grep CRON /var/log/syslog

j'ai uniquement ceci :

Code:
Jan 14 14:15:01 CRON[25329]: (root) CMD (/opt/minecraft/papermc/restartBackup.sh)
 
Dernière édition:

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,

Ne fait pas un sudo crontab -e
Simplement crontab -e devrait être bien :)

Y a pas besoin d'être root pour lancer un serveur minecraft (enfin j'espère que tu as bien configuré pour avoir un user qui lance le serveur xD).

Concernant ton problème, as-tu regardé les logs minecraft ? (dans le dossier "logs").

Pour les logs, tu peux check ceci: https://stackoverflow.com/a/37559327 ;)


Cordialement,
Detobel36
 

Gnaag

Aventurier
8 Janvier 2020
8
1
3
32
Salut,

Ne fait pas un sudo crontab -e
Simplement crontab -e devrait être bien :)

Y a pas besoin d'être root pour lancer un serveur minecraft (enfin j'espère que tu as bien configuré pour avoir un user qui lance le serveur xD).

Concernant ton problème, as-tu regardé les logs minecraft ? (dans le dossier "logs").

Pour les logs, tu peux check ceci: https://stackoverflow.com/a/37559327 ;)


Cordialement,
Detobel36


Hello,

Oui j'ai bien créé un utilisateur spécifique pour lancer le serveur ^^ c'est juste pour éviter les soucis de droits que j'ai fais un sudo crontab le temps de faire les tests.

Je viens de refaire un test (avec un crontab -e cette fois =D) et au niveau des logs Minecraft j'ai uniquement les logs du stop :

Code:
[10:00:01] [Server thread/INFO]: Stopping the server
[10:00:01] [Server thread/INFO]: Stopping server
[10:00:01] [Server thread/INFO]: Saving players
[10:00:01] [Server thread/INFO]: Saving worlds
[10:00:01] [Server thread/INFO]: Saving chunks for level 'world1'/minecraft:overworld
[10:00:02] [Server thread/INFO]: ThreadedAnvilChunkStorage (world1): All chunks are saved
[10:00:02] [Server thread/INFO]: Saving chunks for level 'world1_nether'/minecraft:the_nether
[10:00:02] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[10:00:02] [Server thread/INFO]: Saving chunks for level 'world1_the_end'/minecraft:the_end
[10:00:02] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
[10:00:02] [Server thread/INFO]: ThreadedAnvilChunkStorage (world1): All chunks are saved
[10:00:02] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[10:00:02] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved

ce qui semble indiquer que le .jar n'est pas lancé dans le script.

Pour le lien fourni, je ne comprends pas bien ce qui doit être fait ici :

Code:
logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on

Je m'attendais à ce que logfile, log ou logtstamp soient des commandes à réaliser mais non. Je dois plaçer ca dans mon script exécuté en CRON ?
 

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 le lien fourni, je ne comprends pas bien ce qui doit être fait ici :
Faut lire un minimum hein ;)

create a config file for each process:
Donc tu met ça dans un fichier que tu appel genre "test.conf"

Et puis tu change la commande du screen dans ton script...
Bash:
screen c ./test.conf -dmSL MinecraftServer java -Xmx1536M -Xms1536M -jar paper.jar nogui

Et normalement tu va avoir un fichier "test.log" qui va se créer :)
N'oublies pas que tu peux trouver facilement un fichier sur ta machine en faisant find / -name "test.log"

Une autre solution, donné sur une réponse un peu plus bas sur stackoverflow:
L'idée est de modifier la commande de screen aussi:
Bash:
screen -L -Logfile log_screen.log -dmS MinecraftServer java -Xmx1536M -Xms1536M -jar paper.jar nogui


Cordialement,
Detobel36