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
. 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ß
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:
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:
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!
Benni
moved
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
Dann op-t er mich und sendet mir eine Mail mit der Server-IP. Ok, kleiner Spaß
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
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!
Benni
moved
Zuletzt bearbeitet: