• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Bash Backup Script

deviloper

Minecrafter
Registriert
20 Februar 2015
Beiträge
12
Alter
27
Diamanten
300
Hey,
ich habe ein kleines Bash-Backup-Script für eigene Zwecke geschrieben, teile es aber hier mit euch, damit ihr auch etwas davon habt ;)

Gegeben:

2 Minecraft- und ein TeamSpeak-Server, die alle unter getrennten Benutzern laufen

Funktion:
Ich habe zwar das komplette Script kommentiert, aber hier nochmal:
Also, als erstes führt er mit "sudo" (Das Paket muss installiert sein, geht unter Debian-basierenden Distributionen ganz leicht mit "apt-get install sudo", natürlich als root) den Befehl "save-off" auf den Minecraft-Servern aus. Dann erstellt er tar-Archive im eigenen Ordner, die die kompletten Minecraft- sowie TeamSpeak-Server umfassen. Natürlich sind die Pfade anpassbar, ich habe sogar extra Variablen am Anfang des Scripts definiert :3. Wenn er fertig ist, schaltet er das Chunk-Saving mit "save-on" wieder an. Das save-off / save-on muss sein, da, wen Minecraft mitten im Backuppen einfach so veränderte Chunks speichert, die Gefahr besteht, dass ein defektes Archiv erzeugt wird, und es ergo nicht mehr wiederhergestellt werden kann.
Dann op-t er mich und sendet mir eine Mail mit der Server-IP. Ok, kleiner Spaß :D

Benutzung:
Ihr müsst das Script als Root (oder einem anderen Benutzer, der Rechte auf Ausführen von Befehlen als andere Benutzer hat) ausführen, da es sonst keine Rechte auf das An / Abschalten des Chunksavings hat. Ihr könnt es natürlich auch nicht als Root ausführen lassen, dann wird Chunksaving halt nicht während des Backups abgeschaltet. Dies empfehle ich euch aber aus den oben genannten Gründen nicht! Überprüft lieber das Script, wenn ihr mir nicht traut, und lasst es dann als Root ausführen. Nun könnt ihr noch mittels "crontab -e" (als der User, als den ihr das Script regelmäßig ausführen wollt) eine neue Zeile hinzufügen, mit dem Inhalt:
Code:
*/30 * * * * cd <BACKUPSCRIPT ORDNER>;./backup.sh
Dies führt alle 30 Minuten ein Backup aus. Natürlich müsst ihr "<BACKUP ORDNER>" durch den Pfad des Ordners, in dem ihr das Script lagert, ersetzen.

Der Code selber:
Code:
#!/bin/bash
exec > /dev/null 2>&1
# VARIABLEN
USERNAME_MC1='pubmc' # Benutzername Server 1
SCREENNAME_MC1='minecraft' # Screenname Server 2
PATH_MC1='/home/pubmc' # Pfad Server 1

USERNAME_MC2='privmc' # Benutzername Server 2
SCREENNAME_MC2='minecraft' # Screenname Server 2
PATH_MC2='/home/privmc' # Pfad Server 2

PATH_TEAMSPEAK='/home/teamspeak' # Pfad TeamSpeak

ALTER_BACKUPS=2 # Maximale Anzahl der Tage, die das Backup gespeichert wird
DATUM=`date +%m.%d.%y-%H.%M` # Datumsformat
LOG='1' # LOGS EIN (1) / AUS (0)
LOG_COMMAND_STARTED='broadcast Backup gestartet. Bitte jetzt nichts speichern!' # Command fuer das Loggen beim Starten des Backups
LOG_COMMAND_FINISHED='broadcast Backup fertig. Jetzt kann wieder gespeichert werden.' # Command fuer das Loggen beim Fertigstellen des Backups

# Script vorbereiten
if [ ! -d './minecraft' ]
then
        mkdir minecraft
        mkdir minecraft/$USERNAME_MC1
        mkdir minecraft/$USERNAME_MC2
fi
if [ ! -d './teamspeak' ]
then
        mkdir teamspeak
fi
if [ ! -d './minecraft/$USERNAME_MC1' ]
then
        mkdir minecraft/$USERNAME_MC1
fi
if [ ! -d './minecraft/$USERNAME_MC2' ]
then
        mkdir minecraft/$USERNAME_MC2
fi

# Chunk saving auf den Servern abschalten
if [ $LOG -eq 1 ]
then
        sudo -u $USERNAME_MC1 screen -x $SCREENNAME_MC1 -X stuff "`printf "$LOG_COMMAND_STARTED\r"`";
fi
sudo -u $USERNAME_MC1 screen -x $SCREENNAME_MC1 -X stuff "`printf "save-off\r"`";

if [ $LOG -eq 1 ]
then
        sudo -u $USERNAME_MC2 screen -x $SCREENNAME_MC2 -X stuff "`printf "$LOG_COMMAND_STARTED\r"`";
fi
sudo -u $USERNAME_MC2 screen -x $SCREENNAME_MC2 -X stuff "`printf "save-off\r"`";

# Alte Backups loeschen:
find minecraft/$USERNAME_MC1 -mtime +$ALTER_BACKUPS -exec rm {} \;
find minecraft/$USERNAME_MC2 -mtime +$ALTER_BACKUPS -exec rm {} \;
find ts3 -mtime +$ALTER_BACKUPS -exec rm {} \;

# Backups anlegen:
tar cfv ./minecraft/$USERNAME_MC1/$DATUM.tar $PATH_MC1 # Backup Server 1
tar cfv ./minecraft/$USERNAME_MC2/$DATUM.tar $PATH_MC2 # Backup Server 2
tar cfv ./teamspeak/$DATUM.tar $PATH_TEAMSPEAK # Backup TeamSpeak

# Chunk saving wieder anschalten
if [ $LOG -eq 1 ]
then
        sudo -u $USERNAME_MC1 screen -x $SCREENNAME_MC1 -X stuff "`printf "$LOG_COMMAND_FINISHED\r"`";
fi
sudo -u $USERNAME_MC1 screen -x $SCREENNAME_MC1 -X stuff "`printf "save-on\r"`";

if [ $LOG -eq 1 ]
then
        sudo -u $USERNAME_MC2 screen -x $SCREENNAME_MC2 -X stuff "`printf "$LOG_COMMAND_FINISHED\r"`";
fi
sudo -u $USERNAME_MC2 screen -x $SCREENNAME_MC2 -X stuff "`printf "save-on\r"`";

Diesen speichert ihr einfach als "backup.sh" ab. Wenn noch jemand Fragen hat, helfe ich ihm gerne. Auch kann ich ihm beim Einrichten des Scripts behilflich sein :)
Und, für die erfahrenen Benutzern unter euch: Ich nehme gerne Verbesserungsvorschläge entgegen! :D

Benni


moved ;)
 
Zuletzt bearbeitet:

deviloper

Minecrafter
Registriert
20 Februar 2015
Beiträge
12
Alter
27
Diamanten
300
Geht doch :D Habe btw gerade geupdatet, da ich kleinere Flüchtigkeitsfehler drinhatte, unter anderem, dass er beim Starten und beim Stoppen die selbe Message ausgibt :D ... Also wenn du es verwendest, dann update bitte, nicht dass es heißt, ich schreibe schlechte Scripts ^^
 

deviloper

Minecrafter
Registriert
20 Februar 2015
Beiträge
12
Alter
27
Diamanten
300
Natürlich funktioniert es =) Wir setzen es seit einer Woche auf unserem Server ein, und es gab noch keine Probleme! Ich werde demnächst übrigens eine Funktion einbauen, mit der sich ein Backup wiederherstellen lässt ;)
 
Oben