Batch/.sh- Datei programmieren

Dieses Thema im Forum "Programmierung" wurde erstellt von AnonymusChaotic, 28. Dezember 2014.

  1. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    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 (Text):
    1.  
    2. #!/bin/sh
    3. #Abfrage, welcher Server gebackupt werden soll und in der Variable $name speichern
    4. [INDENT]echo  'Welchen Server backuppen?
    5. Mainserver: m
    6. Funwserver: f
    7. Wienserver: w
    8. bungeecord: b
    9. vanillaserver: v'
    10. read -p 'Gib hier den Namen ein: ' name[/INDENT]
    11. #Datum herausfinden und in der Variable $datum speichern
    12. datum=`date +%Y_%m_%d_%H_%M`
    13. #Testen, welchen Wert die Variable einnimmt und infolgedessen die Variable Servername setzen
    14. if [ $name == m ]
    15.   then servername= mainserver]
    16. if [ $name == f ]
    17.   then servername= funwserver
    18. if [ $name == w ]
    19.   then servername= wienserver
    20. if [ $name == b ]
    21.   then servername= bungeecord
    22. if [ $name == v ]
    23.   then servername= vanillaserver
    24. echo $servername\ wurde\ gewält\!
    25. #.Tar erzeugen
    26. echo Tar\ von\ $servername\ wird\ erzeugt...
    27. tar cfv ${datum}_${servername}_backup.tar $HOME/servers/funwserver
    28. #Variable fuer heutigen Tag festlegen
    29. tag= `date +%Y_%m_%d`
    30. #Backup-Verzeichnis für heutigen Tag erstellen
    31. if [ -d ${HOME}/servers/backups/${tag} ]
    32.   then
    33.     echo Verzeichnis\ backup/${tag}\ bereits\ vorhanden
    34.   else
    35.     mkdir ${HOME}/servers/backups/${tag}
    36. #Verschieben des Archivs in den Tagesordner
    37. mv  ${datum}_${servername}_backup.tar ${HOME}/servers/backups/${tag}
    38. echo DONE!
    39. fi
    40.  
    41.  
    Ausgabe:
    Code (Text):
    1.  
    2. username@servername:~/servers$ ./backup.sh
    3. Welchen Server backuppen?
    4. Mainserver: m
    5. Funwserver: f
    6. Wienserver: w
    7. bungeecord: b
    8. vanillaserver: v
    9. Gib hier den Namen ein: f
    10. ./backup.sh: 39: ./backup.sh: Syntax error: end of file unexpected (expecting "fi")
    11.  

    Teil 2:
    Automatisches Backup-System

    Was soll gemacht werden?

    Die Screens des Users USERNAME mit
    Code (Text):
    1.  
    2. screen -S vanillaserver -X stuff $'end\n
    3.  
    4. screen -S bungeecord -X stuff $'end\n'
    5. screen -S mainserver -X stuff $'stop\n'
    6. screen -S wienserver -X stuff $'stop\n'
    7. screen -S funwserver -X stuff $'stop\n'
    8. screen -ls
    9.  
    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 (Text):
    1.  
    2. cd ~/servers/bungeecord
    3. screen -L -dmS bungeecord java -Xms50M -Xmx1024M -Xincgc -jar BungeeCord.jar nogui
    4. cd ~/servers/mainserver
    5. screen -L -dmS mainserver java -Xms256M -Xmx4096M -Xincgc -jar minecraft_server.jar nogui
    6. cd ~/servers/wienserver
    7. screen -L -dmS wienserver java -Xms256M -Xmx4096M -Xincgc -jar minecraft_server.jar nogui
    8. cd ~/servers/funwserver
    9. screen -L -dmS funwserver java -Xms256M -Xmx4096M -Xincgc -jar minecraft_server.jar nogui
    10. screen -ls
    11. cd ~/servers/vanillaserver
    12. screen -L -dmS vanillaserver java -Xms256M -Xmx2048M -Xincgc -jar minecraft_server.jar nogui
    13.  
    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
     
    #1
    Eisphoenix gefällt das.
  2. Eisphoenix
    Offline

    Eisphoenix

    Registriert seit:
    9. Oktober 2014
    Beiträge:
    82
    Ort:
    Garmisch-Partenkirchen
    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 (Text):
    1.  
    2. #!/bin/bash
    3.  
    4. #Abfrage, welcher Server gebackupt werden soll und in der Variable $name speichern
    5. echo  'Welchen Server backuppen?
    6. Mainserver: m
    7. Funwserver: f
    8. Wienserver: w
    9. bungeecord: b
    10. vanillaserver: v'
    11. read -p 'Gib hier den Namen ein: ' name
    12.  
    13. #Datum herausfinden und in der Variable $datum speichern
    14. datum=`date +%Y_%m_%d_%H_%M`
    15.  
    16. #Testen, welchen Wert die Variable einnimmt und infolgedessen die Variable Servername setzen
    17. case $name in
    18.  
    19. m) servername = mainserver ;;
    20.  
    21. f) servername = funwserver ;;
    22.  
    23. w) servername = wienserver ;;
    24.  
    25. b) servername= bungeecord ;;
    26.  
    27. v) servername= vanillaserver ;;
    28. esac
    29.  
    30. echo "$servername wurde gewählt!"
    31.  
    32. #.Tar erzeugen
    33. echo "Tar von $servername wird erzeugt..."
    34. tar cfv ${datum}_${servername}_backup.tar $HOME/servers/$servername
    35.  
    36. #Variable fuer heutigen Tag festlegen
    37. tag= `date +%Y_%m_%d`
    38.  
    39. #Backup-Verzeichnis für heutigen Tag erstellen
    40. if [ -d ${HOME}/servers/backups/${tag} ]
    41. then
    42. echo "Verzeichnis Backup ${tag} bereits vorhanden!"
    43. else
    44. mkdir ${HOME}/servers/backups/${tag}
    45. echo "Verzeichnis Backup ${tag} wird angelegt!"
    46. fi
    47.  
    48. #Verschieben des Archivs in den Tagesordner
    49. mv  ${datum}_${servername}_backup.tar ${HOME}/servers/backups/${tag}
    50. echo "Fertig!"
    51.  
     
    #2
    AnonymusChaotic gefällt das.
  3. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    Danke :)
    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...
     
    #3
    Eisphoenix gefällt das.
  4. Eisphoenix
    Offline

    Eisphoenix

    Registriert seit:
    9. Oktober 2014
    Beiträge:
    82
    Ort:
    Garmisch-Partenkirchen
    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?
     
    #4
  5. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    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?


    Seeehr starke Passwörter (80 Zeichen +)
    +Fail2Ban

    Nö, gibt es soviel ich weiß nicht.

    Was meinst Du mit umfangreicher?
     
    #5
    Eisphoenix gefällt das.
  6. Eisphoenix
    Offline

    Eisphoenix

    Registriert seit:
    9. Oktober 2014
    Beiträge:
    82
    Ort:
    Garmisch-Partenkirchen
    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.
     
    #6
    AnonymusChaotic gefällt das.
  7. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    wie bereits oben erwähnt wäre ich über eine Lösung glücklich, bei der keine Zugangsdaten auf dem Backupserver gespeichert werden

    Danke mal für die tipps, werde mich da einlesen und dann pprobieren. wenns was neues gibt setze ich den thread hier einfach fort...
     
    #7
    Eisphoenix gefällt das.
  8. McLive
    Offline

    McLive

    Registriert seit:
    18. Juli 2012
    Beiträge:
    67
    #8
    Eisphoenix und AnonymusChaotic gefällt das.
  9. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    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
     
    #9
  10. Eisphoenix
    Offline

    Eisphoenix

    Registriert seit:
    9. Oktober 2014
    Beiträge:
    82
    Ort:
    Garmisch-Partenkirchen
    Minecraft:
    Eisphoenix
    Das war zufällig das Programm das ich gesehen habe und wenn man die Option --delete weglässt sollte es die Dateien nicht löschen.
    Jedoch benötigt man dafür SSH-Zugang.
     
    #10
  11. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    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 (Text):
    1.  
    2. user@servername:~/servers$ ./test.sh
    3. Welchen Server backuppen?
    4. Mainserver: m
    5. Funwserver: f
    6. Wienserver: w
    7. bungeecord: b
    8. vanillaserver: v
    9. Gib hier den Namen ein: m
    10. ./test.sh: line 18: servername: command not found
    11. wurde gewählt!
    12. Tar von  wird erzeugt...
    13. tar: Removing leading `/' from member names
    14.  
    Log vom Abbruch:
    Code (Text):
    1.  
    2. /home/user/servers/funwserver/Fun/region/r.1.1.mca
    3. /home/user/servers/funwserver/Fun/region/r.19.195.mca
    4. tar: 2015_01_05_06_04__backup.tar: Wrote only 8192 of 10240 bytes
    5. tar: Error is not recoverable: exiting now
    6. ./test.sh: line 36: 2015_01_05: command not found
    7. mkdir: cannot create directory `/home/user/servers/backups/': Disk quota exceeded
    8. Verzeichnis Backup  wird angelegt!
    9. mv: cannot move `2015_01_05_06_04__backup.tar' to `/home/user/servers/backups/': Not a directory
    10. Fertig!
    11. user@servername:~/servers$ ls
    12.  
     
    #11
  12. Eisphoenix
    Offline

    Eisphoenix

    Registriert seit:
    9. Oktober 2014
    Beiträge:
    82
    Ort:
    Garmisch-Partenkirchen
    Minecraft:
    Eisphoenix
    Versuch mal um mainserver und Co. " ausenrum zu setzten.
    Hast du genau das Skript übernommen?
     
    #12
  13. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    jup, nur die vergessenen Abstände (servername= vanillaserver ;;) habe ich ergänzt
     
    #13
  14. Eisphoenix
    Offline

    Eisphoenix

    Registriert seit:
    9. Oktober 2014
    Beiträge:
    82
    Ort:
    Garmisch-Partenkirchen
    Minecraft:
    Eisphoenix
    Entferne mal den Abstand vor `date bei Tag
     
    #14