Programm Bash Backup Script

Dieses Thema im Forum "Selbstgeschriebene Plugins | Mods | Programme" wurde erstellt von deviloper, 5. Juni 2015.

  1. deviloper
    Offline

    deviloper

    Registriert seit:
    20. Februar 2015
    Beiträge:
    12
    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 (Text):
    1. */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 (Text):
    1. #!/bin/bash
    2. exec > /dev/null 2>&1
    3. # VARIABLEN
    4. USERNAME_MC1='pubmc' # Benutzername Server 1
    5. SCREENNAME_MC1='minecraft' # Screenname Server 2
    6. PATH_MC1='/home/pubmc' # Pfad Server 1
    7.  
    8. USERNAME_MC2='privmc' # Benutzername Server 2
    9. SCREENNAME_MC2='minecraft' # Screenname Server 2
    10. PATH_MC2='/home/privmc' # Pfad Server 2
    11.  
    12. PATH_TEAMSPEAK='/home/teamspeak' # Pfad TeamSpeak
    13.  
    14. ALTER_BACKUPS=2 # Maximale Anzahl der Tage, die das Backup gespeichert wird
    15. DATUM=`date +%m.%d.%y-%H.%M` # Datumsformat
    16. LOG='1' # LOGS EIN (1) / AUS (0)
    17. LOG_COMMAND_STARTED='broadcast Backup gestartet. Bitte jetzt nichts speichern!' # Command fuer das Loggen beim Starten des Backups
    18. LOG_COMMAND_FINISHED='broadcast Backup fertig. Jetzt kann wieder gespeichert werden.' # Command fuer das Loggen beim Fertigstellen des Backups
    19.  
    20. # Script vorbereiten
    21. if [ ! -d './minecraft' ]
    22. then
    23.         mkdir minecraft
    24.         mkdir minecraft/$USERNAME_MC1
    25.         mkdir minecraft/$USERNAME_MC2
    26. fi
    27. if [ ! -d './teamspeak' ]
    28. then
    29.         mkdir teamspeak
    30. fi
    31. if [ ! -d './minecraft/$USERNAME_MC1' ]
    32. then
    33.         mkdir minecraft/$USERNAME_MC1
    34. fi
    35. if [ ! -d './minecraft/$USERNAME_MC2' ]
    36. then
    37.         mkdir minecraft/$USERNAME_MC2
    38. fi
    39.  
    40. # Chunk saving auf den Servern abschalten
    41. if [ $LOG -eq 1 ]
    42. then
    43.         sudo -u $USERNAME_MC1 screen -x $SCREENNAME_MC1 -X stuff "`printf "$LOG_COMMAND_STARTED\r"`";
    44. fi
    45. sudo -u $USERNAME_MC1 screen -x $SCREENNAME_MC1 -X stuff "`printf "save-off\r"`";
    46.  
    47. if [ $LOG -eq 1 ]
    48. then
    49.         sudo -u $USERNAME_MC2 screen -x $SCREENNAME_MC2 -X stuff "`printf "$LOG_COMMAND_STARTED\r"`";
    50. fi
    51. sudo -u $USERNAME_MC2 screen -x $SCREENNAME_MC2 -X stuff "`printf "save-off\r"`";
    52.  
    53. # Alte Backups loeschen:
    54. find minecraft/$USERNAME_MC1 -mtime +$ALTER_BACKUPS -exec rm {} \;
    55. find minecraft/$USERNAME_MC2 -mtime +$ALTER_BACKUPS -exec rm {} \;
    56. find ts3 -mtime +$ALTER_BACKUPS -exec rm {} \;
    57.  
    58. # Backups anlegen:
    59. tar cfv ./minecraft/$USERNAME_MC1/$DATUM.tar $PATH_MC1 # Backup Server 1
    60. tar cfv ./minecraft/$USERNAME_MC2/$DATUM.tar $PATH_MC2 # Backup Server 2
    61. tar cfv ./teamspeak/$DATUM.tar $PATH_TEAMSPEAK # Backup TeamSpeak
    62.  
    63. # Chunk saving wieder anschalten
    64. if [ $LOG -eq 1 ]
    65. then
    66.         sudo -u $USERNAME_MC1 screen -x $SCREENNAME_MC1 -X stuff "`printf "$LOG_COMMAND_FINISHED\r"`";
    67. fi
    68. sudo -u $USERNAME_MC1 screen -x $SCREENNAME_MC1 -X stuff "`printf "save-on\r"`";
    69.  
    70. if [ $LOG -eq 1 ]
    71. then
    72.         sudo -u $USERNAME_MC2 screen -x $SCREENNAME_MC2 -X stuff "`printf "$LOG_COMMAND_FINISHED\r"`";
    73. fi
    74. 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 ;)
     
    #1
  2. ichkillerich
    Offline

    ichkillerich

    Registriert seit:
    6. Juni 2015
    Beiträge:
    12
    Das is ein Super-Plugin :D
     
    #2
  3. deviloper
    Offline

    deviloper

    Registriert seit:
    20. Februar 2015
    Beiträge:
    12
    Ich hab nie behauptet, dass es ein Plugin ist :D
     
    #3
  4. ichkillerich
    Offline

    ichkillerich

    Registriert seit:
    6. Juni 2015
    Beiträge:
    12
    Oha dann steh ich heute neben der Spur :D

    Ich korrigiere: Das ist ein Super-Script ;-)
     
    #4
  5. deviloper
    Offline

    deviloper

    Registriert seit:
    20. Februar 2015
    Beiträge:
    12
    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 ^^
     
    #5
  6. ichkillerich
    Offline

    ichkillerich

    Registriert seit:
    6. Juni 2015
    Beiträge:
    12
    Natürlich Cheffe :D
    BTW du hast eine PN bekommen :D
     
    #6
  7. deviloper
    Offline

    deviloper

    Registriert seit:
    20. Februar 2015
    Beiträge:
    12
    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 ;)
     
    #7