• 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!

Batch/.sh- Datei programmieren

AnonymusChaotic

Workaholic
Registriert
22 November 2013
Beiträge
760
Diamanten
0
Gegebenheiten:
Die Server liegen im verzeichnis $HOME/servers/$servername
Backups sollen im verzeichnis $HOME/servers/backups/YEAR_MONTH_DAY gespeichert werden.
Was soll gemacht werden?
Abfragen, welcher Server gebackupt werden soll und anschließend die Variable $servername mit dem korrekten Wert belegen.
eine .tar-Datei erzeugen, einen Backup-Ordner für den heutigen Tag erstellen und dieselbe in zuvor backupordner verschieben.

Ja, ich bin im Gebiet der (batch)programmierung blutiger Anfänger ;)


Code:
#!/bin/sh
#Abfrage, welcher Server gebackupt werden soll und in der Variable $name speichern
[INDENT]echo  'Welchen Server backuppen?
Mainserver: m
Funwserver: f
Wienserver: w
bungeecord: b
vanillaserver: v'
read -p 'Gib hier den Namen ein: ' name[/INDENT]
#Datum herausfinden und in der Variable $datum speichern
datum=`date +%Y_%m_%d_%H_%M`
#Testen, welchen Wert die Variable einnimmt und infolgedessen die Variable Servername setzen
if [ $name == m ]
  then servername= mainserver]
if [ $name == f ]
  then servername= funwserver
if [ $name == w ]
  then servername= wienserver
if [ $name == b ]
  then servername= bungeecord
if [ $name == v ]
  then servername= vanillaserver
echo $servername\ wurde\ gewält\!
#.Tar erzeugen
echo Tar\ von\ $servername\ wird\ erzeugt...
tar cfv ${datum}_${servername}_backup.tar $HOME/servers/funwserver
#Variable fuer heutigen Tag festlegen
tag= `date +%Y_%m_%d`
#Backup-Verzeichnis für heutigen Tag erstellen
if [ -d ${HOME}/servers/backups/${tag} ]
  then
    echo Verzeichnis\ backup/${tag}\ bereits\ vorhanden
  else
    mkdir ${HOME}/servers/backups/${tag}
#Verschieben des Archivs in den Tagesordner
mv  ${datum}_${servername}_backup.tar ${HOME}/servers/backups/${tag}
echo DONE!
fi
Ausgabe:
Code:
username@servername:~/servers$ ./backup.sh
Welchen Server backuppen?
Mainserver: m
Funwserver: f
Wienserver: w
bungeecord: b
vanillaserver: v
Gib hier den Namen ein: f
./backup.sh: 39: ./backup.sh: Syntax error: end of file unexpected (expecting "fi")


Teil 2:
Automatisches Backup-System

Was soll gemacht werden?

Die Screens des Users USERNAME mit
Code:
screen -S vanillaserver -X stuff $'end\n

screen -S bungeecord -X stuff $'end\n'
screen -S mainserver -X stuff $'stop\n'
screen -S wienserver -X stuff $'stop\n'
screen -S funwserver -X stuff $'stop\n'
screen -ls
oder ähnlichem beenden, die Backups in .tar oder ähnliche Archivformate verpacken und auf einen anderen Server (ebenfalls Debian minimal, aktuellste Version) kopieren.
Auf dem eigentlichen Server sollen die Dateien ebenfalls bleiben, ich lösche nicht mehr benötigte backups dann manuell.

nach Verpacken startet der Server wieder mit

Code:
cd ~/servers/bungeecord
screen -L -dmS bungeecord java -Xms50M -Xmx1024M -Xincgc -jar BungeeCord.jar nogui
cd ~/servers/mainserver
screen -L -dmS mainserver java -Xms256M -Xmx4096M -Xincgc -jar minecraft_server.jar nogui
cd ~/servers/wienserver
screen -L -dmS wienserver java -Xms256M -Xmx4096M -Xincgc -jar minecraft_server.jar nogui
cd ~/servers/funwserver
screen -L -dmS funwserver java -Xms256M -Xmx4096M -Xincgc -jar minecraft_server.jar nogui
screen -ls
cd ~/servers/vanillaserver
screen -L -dmS vanillaserver java -Xms256M -Xmx2048M -Xincgc -jar minecraft_server.jar nogui
oder ähnlichem.

Auf dem Backupserver sollten nach Möglichkeit keine Zugangsdaten oder andere für einen Angriff auf den hauptserver verwendbaren daten liegen, ich habe in den Backupserver nicht allzu viel Vertrauen ;)

Würde mich über hilfreiche Tipps beim erstellen des Systems freuen
 

Eisphoenix

Kuhfänger
Registriert
9 Oktober 2014
Beiträge
81
Diamanten
0
Minecraft
Eisphoenix
Ich hätte ne Idee für den Backupserver: Du ladest die Backupdatein auf einen Webserver des Hauptservers und ladest es per wget auf dem Backupserver. Und das gleiche von dem Backupserver zu dem Hauptserver.

EDIT: Zum Automatisieren schau dir mal die Cronjobs an.

Noch mal EDIT:
Die Abfrage wegen dem Namen ist falsch, du musst es ab dem zweiten mit elif (Zusammensetzung aus else und if) abfragen. Geeigneter wäre dort case.

Und nochmal EDIT:
Hier mal der Code ohne Backupserver
Code:
#!/bin/bash

#Abfrage, welcher Server gebackupt werden soll und in der Variable $name speichern
echo  'Welchen Server backuppen?
Mainserver: m
Funwserver: f
Wienserver: w
bungeecord: b
vanillaserver: v'
read -p 'Gib hier den Namen ein: ' name

#Datum herausfinden und in der Variable $datum speichern
datum=`date +%Y_%m_%d_%H_%M`

#Testen, welchen Wert die Variable einnimmt und infolgedessen die Variable Servername setzen
case $name in

m) servername = mainserver ;;

f) servername = funwserver ;;

w) servername = wienserver ;;

b) servername= bungeecord ;;

v) servername= vanillaserver ;;
esac

echo "$servername wurde gewählt!"

#.Tar erzeugen
echo "Tar von $servername wird erzeugt..."
tar cfv ${datum}_${servername}_backup.tar $HOME/servers/$servername

#Variable fuer heutigen Tag festlegen
tag= `date +%Y_%m_%d`

#Backup-Verzeichnis für heutigen Tag erstellen
if [ -d ${HOME}/servers/backups/${tag} ]
then
echo "Verzeichnis Backup ${tag} bereits vorhanden!"
else
mkdir ${HOME}/servers/backups/${tag}
echo "Verzeichnis Backup ${tag} wird angelegt!"
fi

#Verschieben des Archivs in den Tagesordner
mv  ${datum}_${servername}_backup.tar ${HOME}/servers/backups/${tag}
echo "Fertig!"
 
Zuletzt bearbeitet:

AnonymusChaotic

Workaholic
Registriert
22 November 2013
Beiträge
760
Diamanten
0
Danke :)
Ich hätte ne Idee für den Backupserver: Du ladest die Backupdatein auf einen Webserver des Hauptservers und ladest es per wget auf dem Backupserver. Und das gleiche von dem Backupserver zu dem Hauptserver."

Eine Idee dieser Kategorie hatte ich auch schon, aber wie verhindere ich am Besten, dass jemand die Dateien herunterlädt und dann veröffentlicht oder missbraucht?
Unser Server hat bereits Medienberichte miterlebt und in Zukunft wird es wohl noch weitere geben.

Da wird es Leute geben, die neidisch sind - Eine Veröffentlichung der Maps o.ä. aufgrund von Sicherheitslücken können wir uns nicht erlauben, könnte sich negativ auf Sponsoren auswirken...
 

Eisphoenix

Kuhfänger
Registriert
9 Oktober 2014
Beiträge
81
Diamanten
0
Minecraft
Eisphoenix
Vielleicht Zeitgesteuert.

Sonst kommt man nicht an Passwörter vorbei.
Ich mache es mit SSH-Zugang und würde gern wissen ob du Keys oder Passwörter benutzt.

Nicht zum Thema: Habt ihr eig. Schutz gegen Welt-Downloader-Mods?

EDIT:
Soll es nur ein Backupscript sein oder darf es ein bisschen umfangreicher sein?
 
Zuletzt bearbeitet:

AnonymusChaotic

Workaholic
Registriert
22 November 2013
Beiträge
760
Diamanten
0
Vielleicht Zeitgesteuert.

Sonst kommt man nicht an Passwörter vorbei.
Kann man nicht bei Apache ein Passwort für den "Zutritt" zu einem einzelnen Verzeichnis setzen oder in einer .htaccess den Zugang nur einer einzelnen IP erlauben?


...Keys oder Passwörter benutzt.
Seeehr starke Passwörter (80 Zeichen +)
+Fail2Ban

Nicht zum Thema: Habt ihr eig. Schutz gegen Welt-Downloader-Mods?
Nö, gibt es soviel ich weiß nicht.

Was meinst Du mit umfangreicher?
 

Eisphoenix

Kuhfänger
Registriert
9 Oktober 2014
Beiträge
81
Diamanten
0
Minecraft
Eisphoenix
Ja das mit dem Login geht. Hier der Link ( http://www.yolinux.com/TUTORIALS/LinuxTutorialApacheAddingLoginSiteProtection.html ). Mit einer IP-Whitelist ging es natürlich auch. Jedoch hab ich vielleicht eine bessere Lösung, die jedoch ein SSH-Zugang benötigt und dann um 5 Uhr morgens immer Backups machen würde und die Backups mit dem Backupserver synchronisieren würde.

Mit umfangreicher meine ich, dass es noch Start, Stop, Restart, und Kommandos extra hätte.
 

AnonymusChaotic

Workaholic
Registriert
22 November 2013
Beiträge
760
Diamanten
0
das ist nicht schlecht, sollte ich aber mal einen Fehler machen und am einen Server Backupdateien löschen, sind die am anderen dann vermutlich auch weg.

Trotzdem danke für den Link, werde mir das Programm mal genauer ansehen und dann einen möglichst idealen Weg wählen
 

AnonymusChaotic

Workaholic
Registriert
22 November 2013
Beiträge
760
Diamanten
0
Aus einem mir unbekanntem Grund erstellt die .sh von Quantencraft ein Backup des gesamten Ordners, in dem ich gerade bin. nachdem dieser ein gutes Dutzend Backup-dateien enthält bricht das Erstellen der .tar irgendwann aufgrund von fehlendem Speicherplatz ab.

Das Teil von Log, den ich noch erwischen konnte, bevor die ersten Dateien gerattert sind....
Code:
user@servername:~/servers$ ./test.sh
Welchen Server backuppen?
Mainserver: m
Funwserver: f
Wienserver: w
bungeecord: b
vanillaserver: v
Gib hier den Namen ein: m
./test.sh: line 18: servername: command not found
wurde gewählt!
Tar von  wird erzeugt...
tar: Removing leading `/' from member names
Log vom Abbruch:
Code:
/home/user/servers/funwserver/Fun/region/r.1.1.mca
/home/user/servers/funwserver/Fun/region/r.19.195.mca
tar: 2015_01_05_06_04__backup.tar: Wrote only 8192 of 10240 bytes
tar: Error is not recoverable: exiting now
./test.sh: line 36: 2015_01_05: command not found
mkdir: cannot create directory `/home/user/servers/backups/': Disk quota exceeded
Verzeichnis Backup  wird angelegt!
mv: cannot move `2015_01_05_06_04__backup.tar' to `/home/user/servers/backups/': Not a directory
Fertig!
user@servername:~/servers$ ls
 
Zuletzt bearbeitet:
Oben