|
#!/ bin / bash |
|
# auteur original: Relliktsohg |
|
# Un grand merci à Maine pour sa sauvegarde incrémentale |
|
# Merci à endofzero pour sa routine de mise à jour améliorée |
|
# |
|
# Installation: |
|
# – Copiez le script dans votre dossier de serveur Minecraft. |
|
# – Autoriser l'exécution du script (chmod + x minecraft.sh) |
|
# – Vérifiez les droits de l'utilisateur du script. Chaque dossier spécifié dans la configuration doit être disponible. |
|
# – Editez le script pour le configurer (voir la section configurer) |
|
# – Plus de détails: http://www.minecraftforum.net/topic/37290-another-shell-script/ |
|
# |
|
# Usage: |
|
# ./minecraft.sh |
|
# – Sans argument, le script reprendra l'écran du serveur. (Si vous voulez fermer |
|
# l'écran sans arrêter le serveur, utilisez CTRL + A puis appuyez sur D pour détacher l'écran) |
|
# |
|
# statut ./minecraft.sh |
|
# – Vous indique si le serveur est en cours d'exécution ou non. |
|
# |
|
# ./minecraft.sh start [force] |
|
# – Démarre le serveur. Si vous savez que votre serveur ne fonctionne pas, mais que le script le croit, utilisez la commande |
|
# options de force. |
|
# |
|
# ./minecraft.sh stop [force] |
|
# – S'explique |
|
# |
|
# ./minecraft.sh redémarrer [warn] |
|
# – Si l'option warn est spécifiée, un avertissement 30s & 10s s'affichera avant le redémarrage. |
|
# |
|
# Journaux ./minecraft.sh [clean] |
|
# – Analyse les journaux dans plusieurs fichiers, regroupés dans un dossier nommé avec la date de la journalisation. |
|
# Si l'option de nettoyage est spécifiée, les dossiers les plus anciens seront déplacés dans le dossier de sauvegarde. |
|
# Encore une fois, cette commande devrait poser problème avant le redémarrage du serveur. |
|
# |
|
# ./minecraft.sh sauvegarde [clean] |
|
# – Affiche un message aux joueurs si le serveur est en ligne, arrête l'écriture de morceaux, crée un |
|
# archives datées et sauvegarde le dossier du monde. Si l'option de nettoyage est spécifiée, le programme sera supprimé. |
|
# archives plus anciennes. |
|
# |
|
# ./minecraft.sh cartographie |
|
# – Affiche un message aux joueurs si le serveur est en ligne, arrête l'écriture de morceaux, initie |
|
# Le script de cartographie de c10t. Je recommande fortement que MAPS_PATH soit un dossier public Internet. |
|
# |
|
# ./minecraft.sh mise à jour |
|
# – Arrête le serveur s'il est en ligne, sauvegarde les anciens binairies, télécharge les derniers binaires de |
|
# mincraft.net et redémarre le serveur. |
|
|
|
# Configuration |
|
MC_PATH = / home / minecraft |
|
SERVERMOD = 0 |
|
RUNECRAFT = 0 |
|
SCREEN_NAME ="Minecraft" |
|
MEMALOC = 512 |
|
DISPLAY_ON_LAUNCH = 1 |
|
|
|
WORLD_NAME ="monde" |
|
|
|
BKUP_PATH =$ MC_PATH/ sauvegarde |
|
BKUP_DAYS_INCR = 2 |
|
BKUP_DAYS_FULL = 5 |
|
BACKUP_FULL_LINK =$ BKUP_PATH/$ WORLD_NAME_full.tgz |
|
BACKUP_INCR_LINK =$ BKUP_PATH/$ WORLD_NAME_incr.tgz |
|
|
|
CARTO_PATH =$ MC_PATH/ carto |
|
MAPS_PATH = / var / www / minecraftMaps |
|
LOG_TDIR = / var / www / minecraftLogs |
|
LOGS_DAYS = 7 |
|
|
|
# Fin de configuration |
|
|
|
si [[[[$ SERVERMOD -eq 1 ] |
|
puis |
|
si [[[[-e $ MC_PATH/ journaux /*.log.lck] |
|
puis |
|
ONLINE = 1 |
|
autre |
|
ONLINE = 0 |
|
Fi |
|
autre |
|
si [[[[-e $ MC_PATH/server.log.lck] |
|
puis |
|
# ps -e | grep java | wc -l |
|
ONLINE = 1 |
|
autre |
|
ONLINE = 0 |
|
Fi |
|
Fi |
|
|
|
afficher() |
|
écran -R $ SCREEN_NAME |
|
|
|
|
|
serveur_launch() |
|
écho "Lancer le serveur minecraft …" |
|
si [[[[$ SERVERMOD -eq 1 ] |
|
puis |
|
CD $ MC_PATH; écran -m -d -S $ SCREEN_NAME java -Xmx$ MEMALOCM -Xms$ MEMALOCM -Djava.net.preferIPv4Stack = true -jar Minecraft_Mod.jar nogui; dormir 1 |
|
autre |
|
CD $ MC_PATH; écran -m -d -S $ SCREEN_NAME java -Xmx$ MEMALOCM -Xms$ MEMALOCM -Djava.net.preferIPv4Stack = true -jar minecraft_server.jar nogui; dormir 1 |
|
Fi |
|
|
|
|
|
arrêt_serveur() |
|
écho "Arrêt du serveur minecraft …" |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "arrêter. r"`"; dormir 5 |
|
|
|
|
|
si [[[[$ # -gt 0] |
|
puis |
|
Cas 1 $ dans |
|
|
|
################################################## ############### |
|
"statut") |
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
écho "Le serveur Minecraft semble en ligne." |
|
autre |
|
écho "Le serveur Minecraft semble hors ligne." |
|
Fi;; |
|
|
|
################################################## ############### |
|
"début") |
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
écho "Le serveur semble déjà fonctionner!" |
|
Cas 2 $ dans |
|
"Obliger") |
|
tuer `ps -e | grep java | cut -d " " -f 1` |
|
rm -fr $ MC_PATH/*.log.lck 2> / dev / null / ;; |
|
esac |
|
autre |
|
serveur_launch |
|
si [[[[$ DISPLAY_ON_LAUNCH -eq 1 ] |
|
puis |
|
afficher |
|
Fi |
|
Fi;; |
|
|
|
################################################## ############### |
|
"Arrêtez") |
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
arrêt_serveur |
|
autre |
|
Cas 2 $ dans |
|
"Obliger") |
|
tuer `ps -e | grep java | cut -d " " -f 1` |
|
rm -fr $ MC_PATH/*.log.lck 2> / dev / null / ;; |
|
*) |
|
écho "Le serveur semble être hors ligne …";; |
|
esac |
|
Fi;; |
|
|
|
################################################## ############### |
|
"redémarrer") |
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
Cas 2 $ dans |
|
"prévenir") |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "dit le serveur va redémarrer dans 30s! r"`"; dormir 20 |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "Dites que le serveur va redémarrer dans 10s! r"`"; dormir 10 ;; |
|
esac |
|
arrêt_serveur |
|
Fi |
|
serveur_launch |
|
si [[[[$ DISPLAY_ON_LAUNCH -eq 1 ] |
|
puis |
|
afficher |
|
Fi;; |
|
|
|
################################################## ############### |
|
"les journaux") |
|
mkdir -p $ LOG_TDIR |
|
CD $ LOG_TDIR |
|
|
|
Cas 2 $ dans |
|
"nettoyer") |
|
DATE =$ (date +% d-% m –date "$ LOGS_DAYS il y a jour") |
|
si [[[[-e journaux$ DATE ] |
|
puis |
|
mkdir -p $ BKUP_PATH/ journaux |
|
mv logs-$ DATE $ BKUP_PATH/ journaux / |
|
Fi |
|
;; |
|
esac |
|
|
|
DATE =$ (date +% d-% m) |
|
LOG_NEWDIR = logs-$ DATE |
|
si [[[[-e $ LOG_TDIR/$ LOG_NEWDIR ] |
|
puis |
|
rm $ LOG_TDIR/$ LOG_NEWDIR/* |
|
autre |
|
mkdir $ LOG_TDIR/$ LOG_NEWDIR |
|
Fi |
|
|
|
DATE =$ (date +% d-% m-% Hh% M) |
|
LOG_TFILE = logs-$ DATE.bûche |
|
|
|
si [[[[$ SERVERMOD -eq 1 ] |
|
puis |
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
LOG_LCK =$ (nom de base $ MC_PATH/ journaux /*.log.lck .log.lck) |
|
écho "Trouvé un journal verrouillé: $ LOG_LCK" |
|
autre |
|
LOG_LCK ="" |
|
Fi |
|
|
|
CD $ MC_PATH/ journaux / |
|
pour je dans * |
|
faire |
|
si [[[[$ i ! = $ LOG_LCK.log.lck] # skip du fichier lck |
|
puis |
|
chat $ i >> $ LOG_TDIR/$ LOG_NEWDIR/$ LOG_TFILE |
|
si [[[[$ i ! = $ LOG_LCK.log] # Si vous ne supprimez pas le fichier journal, si le service est en route |
|
puis |
|
rm $ i |
|
Fi |
|
Fi |
|
terminé |
|
autre |
|
CD $ MC_PATH |
|
chat serveur.log >> $ LOG_TDIR/$ LOG_NEWDIR/$ LOG_TFILE |
|
Fi |
|
|
|
si [[[[-e $ LOG_TDIR/ip-list.log] |
|
puis |
|
chat $ LOG_TDIR/ip-list.log | Trier | uniq > $ LOG_TDIR/templist.log |
|
Fi |
|
|
|
chat $ LOG_TDIR/$ LOG_NEWDIR/$ LOG_TFILE | egrep '[0-9]+ .[0-9]+ .[0-9]+ .[0-9]+. + connecté' | sed -e 's /.* [INFO] s // g' -e 's / [//t/g[//t/g[//t/g[//t/g' -e 's /:.*// g' >> $ LOG_TDIR/templist.log |
|
chat $ LOG_TDIR/templist.log | Trier | uniq -w 4 > $ LOG_TDIR/ip-list.log |
|
rm $ LOG_TDIR/templist.log |
|
|
|
chat $ LOG_TDIR/$ LOG_NEWDIR/$ LOG_TFILE | egrep 'connecté | connexion perdue' | sed -e 's /.* ([0-9] 2 :[0-9] 2 :[0-9] 2 ). [INFO]. ([a-zA-Z0-9_] 1, ). 1, connecté / 1 t 2: connecté / g' -e 's /.* ([0-9] 2 :[0-9] 2 :[0-9] 2 ). [INFO]. ([a-zA-Z0-9_] 1, ). Connexion perdue. * / 1 t 2: déconnecté / g' >> $ LOG_TDIR/$ LOG_NEWDIR/ connexions-$ DATE.bûche |
|
|
|
chat $ LOG_TDIR/$ LOG_NEWDIR/$ LOG_TFILE | egrep '<[a-zA-Z0-9_]+>| [CONSOLE]' | sed -e 's /.* ([0-9] 2 :[0-9] 2 :[0-9] 2 ). [INFO]./1 / g' >> $ LOG_TDIR/$ LOG_NEWDIR/bavarder-$ DATE.bûche |
|
|
|
chat $ LOG_TDIR/$ LOG_NEWDIR/$ LOG_TFILE | egrep 'Exception interne | erreur' | sed -e 's /.* ([0-9] 2 :[0-9] 2 :[0-9] 2 ). [INFO]./1t/g' >> $ LOG_TDIR/$ LOG_NEWDIR/les erreurs-$ DATE.bûche |
|
;; |
|
|
|
################################################## ############### |
|
"sauvegarde") |
|
|
|
mkdir -p $ BKUP_PATH |
|
|
|
si [[[[-e $ MC_PATH/$ WORLD_NAME ] |
|
puis |
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
écho "Serveur en marche, avertissant les joueurs: sauvegarde par 10." |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "Sauvegarde de la carte en 10 secondes"`"; dormir 10 |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "Maintenant, sauvegardez la carte …"`" |
|
écho "Emission de la commande save-all, attendez 5s …" |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "sauver-tout r"`"; dormir 5 |
|
écho "Envoi de la commande de sauvegarde …" |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "save-off r"`"; dormir 1 |
|
Fi |
|
|
|
CD $ BKUP_PATH |
|
|
|
DATE =$ (date +% Y-% m-% d-% Hh% M) |
|
FILENAME =$ WORLD_NAME–$ DATE |
|
BACKUP_FILES =$ BKUP_PATH/liste.$ DATE |
|
|
|
si tester `date +% H` -qq 0 -o ! -F $ BACKUP_FULL_LINK |
|
puis |
|
# Effectuer une sauvegarde complète et supprimer les anciens fichiers incrémentiels |
|
FILENAME =$ FILENAME-full.tgz |
|
|
|
# Supprimer les incrémentales antérieures à $ BKUP_DAYS_INCR |
|
# Supprimer les archives complètes antérieures à $ BKUP_DAYS_FULL |
|
trouver ./$ WORLD_NAME–*-incr.tgz -type f -mtime +$ BKUP_DAYS_INCR -impression > purgeliste |
|
trouver ./$ WORLD_NAME–*-full.tgz -type f -mtime +$ BKUP_DAYS_FULL -impression >> purgeliste |
|
rm -f `purgiste de chat` |
|
rm -f purgelist |
|
|
|
# Maintenant, faites notre sauvegarde complète |
|
pushd $ MC_PATH |
|
trouver $ WORLD_NAME -type f -print > $ BACKUP_FILES |
|
tar -zcvf $ BKUP_PATH/$ FILENAME –files-from =$ BACKUP_FILES |
|
popd |
|
|
|
rm -f $ BACKUP_FULL_LINK $ BACKUP_INCR_LINK |
|
l-s $ FILENAME $ BACKUP_FULL_LINK |
|
autre |
|
# Faire une sauvegarde incrémentielle |
|
FILENAME =$ FILENAME-incr.tgz |
|
|
|
pushd $ MC_PATH |
|
trouver $ WORLD_NAME -la réponse $ BACKUP_FULL_LINK -type f -print > $ BACKUP_FILES |
|
tar -zcvf $ BKUP_PATH/$ FILENAME –files-from =$ BACKUP_FILES |
|
popd |
|
|
|
rm -f $ BACKUP_INCR_LINK |
|
l-s $ FILENAME $ BACKUP_INCR_LINK |
|
Fi |
|
|
|
rm -f $ BACKUP_FILES |
|
|
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
écho "Emission d'une commande de sauvegarde …" |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "enregistrer sur r"`"; dormir 1 |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "dire que la sauvegarde est terminée, amusez-vous!"`" |
|
Fi |
|
écho "Le processus de sauvegarde est terminé." |
|
autre |
|
écho "Le monde "$ WORLD_NAME " n'existe pas."; |
|
Fi;; |
|
|
|
################################################## ############### |
|
"cartographie") |
|
|
|
si [[[[-e $ CARTO_PATH ] |
|
puis |
|
si [[[[-e $ MC_PATH/$ WORLD_NAME ] |
|
puis |
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
écho "Emission de la commande save-all, attendez 5s …"; |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "sauver-tout r"`"; dormir 5 |
|
écho "Envoi de la commande de sauvegarde …"; |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "save-off r"`"; dormir 1 |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "La cartographie cartographique a commencé."`" |
|
Fi |
|
|
|
mkdir -p $ MAPS_PATH |
|
|
|
DATE =$ (date +% d-% m-% A-% Hh% M) |
|
FILENAME =$ WORLD_NAME-carte-$ DATE |
|
CD $ CARTO_PATH |
|
écho "Cartographie en cours …" |
|
./c10t -w $ MC_PATH/$ WORLD_NAME/ -o $ FILENAME.png -q -s |
|
mv *.png $ MAPS_PATH |
|
CD $ MC_PATH |
|
écho "La cartographie est terminée." |
|
|
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
écho "Emission d'une commande de sauvegarde …" |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "enregistrer sur r"`"; dormir 1 |
|
écran -S $ SCREEN_NAME -p 0 -X choses "`printf "dire la cartographie de la carte est faite. r"`" |
|
Fi |
|
|
|
autre |
|
écho "Le monde "$ WORLD_NAME " n'existe pas."; |
|
Fi |
|
autre |
|
écho "Le chemin vers cartographier semble être faux." |
|
Fi;; |
|
|
|
################################################## ############### |
|
"mettre à jour") |
|
|
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
arrêt_serveur |
|
Fi |
|
|
|
mkdir -p $ BKUP_PATH |
|
|
|
écho "Sauvegarde des fichiers binaires actuels …" |
|
DATE =$ (date +% d-% m-% Y) |
|
CD $ MC_PATH |
|
si [[[[$ SERVERMOD -eq 1 ] |
|
puis |
|
tar -czf minecraft_server-$ DATE.tar.gz minecraft_server.jar Minecraft_Mod.jar |
|
rm Minecraft_Mod.jar |
|
autre |
|
tar -czf minecraft_server-$ DATE.tar.gz minecraft_server.jar |
|
Fi |
|
mv minecraft_server-$ DATE.tar.gz $ BKUP_PATH |
|
|
|
écho "Téléchargement de nouveaux fichiers binaires …" |
|
wget -N http://www.minecraft.net/download/minecraft_server.jar |
|
si [[[[$ SERVERMOD -eq 1 ] |
|
puis |
|
"Téléchargement de serverMod de hey0 …" |
|
mkdir -p ModTmp; CD ModTmp / |
|
wget -O Minecraft_Mod.zip http://hey0.net/get.php?dl = serverbeta |
|
Décompressez Minecraft_Mod.zip |
|
cp bin / Minecraft_Mod.jar $ MC_PATH/Minecraft_Mod.jar |
|
CD $ MC_PATH; rm -rf ModTmp |
|
Fi |
|
si [[[[$ RUNECRAFT -eq 1 ] |
|
puis |
|
écho "Téléchargement de Runecraft …" |
|
mkdir -p ModTmp; CD ModTmp / |
|
wget http://llama.cerberusstudios.net/runecraft_latest.zip |
|
décompresser runecraft_latest.zip |
|
pot uvf $ MC_PATH/minecraft_server.jar in.class o.class mm.class rm.class rn.class rt.class |
|
CD $ MC_PATH; rm -rf ModTmp |
|
Fi |
|
|
|
serveur_launch |
|
si [[[[$ DISPLAY_ON_LAUNCH -eq 1 ] |
|
puis |
|
afficher |
|
Fi;; |
|
|
|
################################################## ############### |
|
*) |
|
écho "Utilisation: minecraft "; |
|
esac |
|
|
|
autre |
|
si [[[[$ ONLINE -eq 1 ] |
|
puis |
|
afficher |
|
autre |
|
écho "Le serveur Minecraft semble être hors ligne …" |
|
Fi |
|
Fi |
|
sortie 0 |
Commentaires
Laisser un commentaire