Minecraft Server start-skript für Linux

Dieses Thema im Forum "Programmierung" wurde erstellt von toemsel1, 24. Oktober 2014.

  1. toemsel1
    Offline

    toemsel1

    Registriert seit:
    9. August 2012
    Beiträge:
    120
    Ort:
    Österreich, Voradelberg
    Minecraft:
    toemsel1
    Guten Tag!

    Ich arbeite an einem Start-Skript für meinen Minecraft Server das recht umfangreich werden soll.

    Momentan benutze ich nur 1 skript für Minecraft

    Mit dem 1. Skript starte ich momentan alle Server. Und zwar gebe ich das Skript in den Server Ordner und führe es über die Konsole mit nem Screen aus.

    Da ich das aber in Zukunft einfacher machen möchte arbeite ich an einem umfangreicheren skript.

    das 1.Skript: (ist in meinem falle jetzt nicht wichtig)
    Code (Text):
    1.  
    2. #!/bin/bash
    3. cd "${0%/*}"; java -Xms512M -Xmx6144M -jar spigot18.jar
    4.  

    An diesem Skript arbeite ich gerade:
    Code (Text):
    1.  
    2. #!/bin/bash
    3.  
    4. ###Config
    5. minram="512"
    6. maxram="6144"
    7. servername="lobby"
    8. server="$servername"_"$number"_"$port"
    9. servers="lobbys"
    10. number="1"
    11. userm="user"
    12. game="minecraft"
    13. software="spigot"
    14.  
    15. email="xx@xx.com" ### Geht noch ned ###
    16.  
    17. backuppath="home/backup/$games"
    18. gamepath="home/$game/"
    19.  
    20. ###Ende Config
    21.  
    22. cd /$gamepath/$servers/"$server"_"$number"_"$port"
    23. case "$1" in
    24. start)
    25. cp /$gamepath/worlds/$server/$server /$gamepath/$servers/"$server"_"$number"_"$port" ### Damit die Lobbys immer auf dem neuesten stand sind wird die welt aus dem ordner kopiert ###
    26. echo "Welten werden Kopiert..."
    27. cp /$gamepath/plugins/$server/$server$number /$gamepath/$servers/"$server"_"$number"_"$port"/plugins/
    28. cp /$gamepath/plugins/$server/allgemein /$gamepath/$servers/"$server"_"$number"_"$port"/plugins/  ###Damit ich ned bei jeder lobby die plugin manuell hochladen und einstellen muss hab ich einen Ordner gemacht aus dem die Plugins kopiert werden ###
    29. echo "Plugins werden Kopiert..."
    30. echo "Start Server "$number""$server" on Port $port..."
    31. screen -A -m -d -S "$number""$server" java -Xms"$minram"M -Xmx"$maxram"M -jar "$software".jar
    32. exit 0
    33. ;;
    34. stop)
    35. su $userm -c "screen -rx "$number""$server" -X quit"
    36. rm /$gamepath/$server/"$server"_"$number"_"$port"/$server ### welt soll gelöscht werden (wird ja beim start reinkopiert)###
    37. rm /$gamepath/$server/"$server"_"$number"_"$port"/plugins ### plugins werden gelöscht ###
    38. rm /$gamepath/$server/"$server"_"$number"_"$port"/"$server"_nether ### welt wird gelöscht ###
    39. rm /$gamepath/$server/"$server"_"$number"_"$port"/"$server"_the_end ### welt wird gelöscht ###
    40. mkdir /$gamepath/$server/"$server"_"$number"_"$port"/plugins ### der ordner plugins wird erstellt ###
    41. echo "Stop Server "$server"-"$number" on Port $port..."
    42. exit 0
    43. ;;
    44. restart)
    45. $0 stop && $0 start
    46. exit 0
    47. ;;
    48. see)
    49. screen -r $number$server
    50. exit 0
    51. ;;
    52. clear)
    53. echo -n > /$gamepath/$servers/"$server"_"$number"_"$port"/server.log
    54. echo "server.log wurden geleert."
    55. ;;
    56. backup)
    57. tar cfv /$backuppath/$server/serverbackup.tar /$gamepath/$servers/
    58. echo "Serverbackup beendet! Beginne mit dem komprimieren."
    59. gzip /home/lexat/backups/mc_backups/serverbackup.tar
    60. echo "Das eben erstellte Backup wurde erfolgreich komprimiert."
    61. ;;
    62. *)
    63. echo "Use (start|restart|stop|see|clear|backup)"
    64. ;;
    65. esac
    66. exit 0
    67.  
    68.  

    1.Frage: die Variable servername funktioniert diese so:
    Code (Text):
    1. server=""$servername"_"$number"_"$port""
    2. Ich würd gerne einen Autostart einbauen wenn der server gecrasht iust oder der root rebootet wird. wie mache ich das am besten??

    3. Bei nem Server soll eine E-mail an mich gesendet werden mit den letzten zeilen der Log

    4. Ich hab ma gegoogelt, aber ich bin noch ned schlau geworden wie ich den text in der Konsole Farbig mache bsp: "Der Server wir Restartet" soll in der Konsole Gelb erscheinen

    Hab ihr irgend welche Fehler/Bugs gefunden?
    Oder ideen/vorschläge was ihr ändern würdet bzw. zusätzlich einbauen?


    Danke für euere Hilfe

    Hochachtungsvoll

    Thomas
     
    #1
  2. toemsel1
    Offline

    toemsel1

    Registriert seit:
    9. August 2012
    Beiträge:
    120
    Ort:
    Österreich, Voradelberg
    Minecraft:
    toemsel1
    Ich habe einen root Server
     
    #2
  3. toemsel1
    Offline

    toemsel1

    Registriert seit:
    9. August 2012
    Beiträge:
    120
    Ort:
    Österreich, Voradelberg
    Minecraft:
    toemsel1
    ok Danke für die hilfe. Werd ma schauen

    beim 3. hab ich ausversehen was vergessen zum schreiben. und zwar:

    Bei nem Server crash soll eine mail an mich gesendet werden mit den Letzten 50 zeilen der log.

    Soo weit bin ich ez. hab n paar Bugs gefixt.
    Code (Text):
    1.  
    2. #!/bin/bash
    3.  
    4. ###Config
    5. minram="512"
    6. maxram="6144"
    7. servername="lobby"
    8. servers="lobbys"
    9. number="3"
    10. port="20024"
    11. userm="root"
    12. game="minecraft"
    13. software="spigot"
    14. version="18"
    15.  
    16. server="${servername}_${number}_${port}"
    17.  
    18. email="galaxylive@live.at" ###geht nochg ned.
    19.  
    20. backuppath="home/backup/$games"
    21. gamepath="home/$game"
    22.  
    23. ###Ende Config
    24.  
    25. cd /$gamepath/$servers/$server
    26. case "$1" in
    27. start)
    28. cp /$gamepath/world/$servername/$servername/ /$gamepath/$servers/$server
    29. echo -e "\e[96mWelten werden Kopiert...\e[0m"
    30. cp /$gamepath/plugins/$servername/$servername$number/plugins/ /$gamepath/$servers/$server/plugins/
    31. cp /$gamepath/plugins/$servername/allgemein/plugins/ /$gamepath/$servers/$server/plugins/
    32. echo -e "\e[96mPlugins werden Kopiert \e[5m...\e[0m"
    33. echo -e "\e[96mStart server "$number""$servername" on Port $port \e[5m...\e[0m"
    34. screen -A -m -d -S "$number""$servername" java -Xms"$minram"M -Xmx"$maxram"M -jar "$software""$version".jar
    35. exit 0
    36. ;;
    37. stop)
    38. screen -S "$number""$servername" -X stuff $'save-all\n'
    39. echo -e "\e[96mDer Save-All-Befehl wurde an den Server gesendet.\e[0m"
    40. screen -S"$number""$servername" -X stuff $'stop\n'
    41. echo -e "\e[96mDer Stop-Befehl wurde an den Server gesendet.\e[0m"
    42. cp /$gamepath/$servers/$server/playerdata /$gamepath/world/$servername/$servername/
    43. su $userm -c "screen -rx "$number""$servername" -X quit"
    44. rm /$gamepath/$servername/$server/$servername/
    45. rm /$gamepath/$servername/$server/plugins
    46. rm /$gamepath/$servername/$server/"$servername"_nether
    47. rm /$gamepath/$servername/$server/"$servername"_the_end
    48. mkdir /$gamepath/$servername/$server/plugins
    49. echo -e "\e[96mStop server "$servername"-"$number" on Port $port \e[5m...\e[0m"
    50. exit 0
    51. ;;
    52. restart)
    53. $0 stop && $0 start
    54. exit 0
    55. ;;
    56. see)
    57. screen -r $number$servername
    58. exit 0
    59. ;;
    60. clear)
    61. echo -n > /$gamepath/$servers/$server/server.log
    62. echo -e "\e[96mServer.log wurden geleert.\e[0m"
    63. ;;
    64. backup)
    65. tar cfv /$backuppath/$servername/backup_"$servername"_"$number".tar /$gamepath/$servers/$server
    66. echo -e "\e[96mserverbackup beendet! Beginne mit dem komprimieren.\e[0m"
    67. gzip /$backuppath/$servername/serverbackup.tar
    68. echo -e "\e[96mDas eben erstellte Backup wurde erfolgreich komprimiert.\e[0m"
    69. ;;
    70. export)
    71. echo -e "\e[96mDieser Befehl geht noch nicht. In Arbeit\e[0m"
    72. ;;
    73. *)
    74. echo -e "\e[96mUse ( start | restart | top | see | clear | backup | export )\e[0m"
    75. ;;
    76. esac
    77. exit 0
    78.  
    79.  

    Ein problem hab ich noch.

    beim cp Befehl wird mir der Plugins Ordner ned kopiert
     
    #3
  4. Bl4ckSkull666
    Offline

    Bl4ckSkull666

    Registriert seit:
    11. September 2014
    Beiträge:
    10
    Minecraft:
    Bl4ckSkull666
    Kein wunder, wende doch mal das was du bei der Variable server gemacht hast einfach überall an

    Code (Text):
    1.  
    2. cp /$gamepath/$servers/$server/playerdata /$gamepath/world/$servername/$servername/
    3. wird zu :
    4. cp "/${gamepath}/${servers}/${server}/playerdata" "/${gamepath}/world/${servername}/${servername}/"
    5.  
    Wende das im gesamten Scipt mal an...Dann klappt es auch besser und Variablen sind deutlich lesbar und sichtbar auch für die bash.
     
    #4
  5. toemsel1
    Offline

    toemsel1

    Registriert seit:
    9. August 2012
    Beiträge:
    120
    Ort:
    Österreich, Voradelberg
    Minecraft:
    toemsel1
    ok danke. werd ich machen. hoffe es klappt auch dann
     
    #5
  6. toemsel1
    Offline

    toemsel1

    Registriert seit:
    9. August 2012
    Beiträge:
    120
    Ort:
    Österreich, Voradelberg
    Minecraft:
    toemsel1
    Hab es jetzt so gemacht wie du gesagt hast.

    In der konsole kommt folgendes wenn ich das script ausführe:

    Code (Text):
    1.  
    2.  
    3. ./start_minecraft.sh start
    4. cp: omitting directory `/home/minecraft/worlds/lobby/lobby/'
    5. Welten werden Kopiert...
    6. cp: omitting directory `/home/minecraft/plugins/lobby/lobby3/plugins'
    7. cp: omitting directory `/home/minecraft/plugins/lobby/allgemein/plugins'
    8. Plugins werden Kopiert ...
    9. Start server 3lobby on Port 20024 ...
    10.  
    11.  
    Komischerweiße kopiert das skript mir die dateien ned.
     
    #6
  7. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    Bei Ordnern muss es Recursive sein. Also
    Code (Text):
    1. cp -r "/${gamepath}/${servers}/${server}/playerdata" "/${gamepath}/world/${servername}/${servername}/"
     
    #7
    toemsel1 gefällt das.
  8. Darkangel93424
    Offline

    Darkangel93424

    Registriert seit:
    28. Januar 2012
    Beiträge:
    20
    Minecraft:
    Darkangel
    warum kopierst und löscht du beim Starten bzw. Stoppen denn die ganzen Dateien, was hat das für ein Sinn

    Es müsste übrigens beim Löschen auch rekursiv sein, ansonsten Löscht er nur wenn der Ordner keine Dateien beinhaltet (rm -R <pfad>)
     
    #8
    toemsel1 gefällt das.
  9. toemsel1
    Offline

    toemsel1

    Registriert seit:
    9. August 2012
    Beiträge:
    120
    Ort:
    Österreich, Voradelberg
    Minecraft:
    toemsel1
    ok. Löschen und kopieren tu ich es drum damit ich die lobby plugins und so in einen Ordner hauen kann und dann alles immer von der map und den plugins her up-to-date ist. (nach nem restart)
     
    #9
  10. toemsel1
    Offline

    toemsel1

    Registriert seit:
    9. August 2012
    Beiträge:
    120
    Ort:
    Österreich, Voradelberg
    Minecraft:
    toemsel1
    EDIT:
    Das Straten funktioniert einwandfrei. was noch nicht klappt is das beim Stoppen alles gesavet wird und in der konsole der stopbefehl ausgeführt wird. Aber das bekomm ich noch hin.
     
    #10
  11. Darkangel93424
    Offline

    Darkangel93424

    Registriert seit:
    28. Januar 2012
    Beiträge:
    20
    Minecraft:
    Darkangel
    ich weiß nicht ganz was du unter "saven" verstehst, aber um die Dateien einfach wegzukopieren musst du den cp Befehl wie beim starten verwenden oder du packst das alles in ein archiv (tar wir im backup). Den stoppbefehl machst du mit folgendem code:
    'screen -p 0 -S "$number""$servername" -X stuff "stop\015"' (Muss vom selben benutzer ausgeführt werden, der den Screen gestartet hat)
    das Wort stop kann auch durch andere befehle ersetzt werden (z.B. say Server stoppt in 5 Sekunden)
     
    #11
    toemsel1 gefällt das.
  12. toemsel1
    Offline

    toemsel1

    Registriert seit:
    9. August 2012
    Beiträge:
    120
    Ort:
    Österreich, Voradelberg
    Minecraft:
    toemsel1
    ok. werd es ma so ausprobieren

    das mit "saven" hab ich vll blöd geschrieben aber gemeint ist das soo das die daten des servers gespeichert werden, macht zwar nicht viel sinn aber wenn ich den screen einfach nur lösche is das ca. do wie wenn man einem rechner den strom nimmt.

    das mit dem Stopbefehl reicht schon. da werden die daten e gespeiert
     
    #12
  13. Darkangel93424
    Offline

    Darkangel93424

    Registriert seit:
    28. Januar 2012
    Beiträge:
    20
    Minecraft:
    Darkangel
    achso, alternativ kannst du ja noch davor 'screen -p 0 -S "$number""$servername" -X stuff "save-all\015"' machen ;)
     
    #13
    toemsel1 gefällt das.
  14. AnonymusChaotic
    Offline

    AnonymusChaotic

    Registriert seit:
    22. November 2013
    Beiträge:
    762
    Ort:
    Wien, Österreich
    Minecraft:
    AnonymusChaotic
    #14
    toemsel1 gefällt das.
  15. toemsel1
    Offline

    toemsel1

    Registriert seit:
    9. August 2012
    Beiträge:
    120
    Ort:
    Österreich, Voradelberg
    Minecraft:
    toemsel1
    ok. Danke.

    Dieses Skript kann ich gut für den autostart genrauchen. mit n bisschen umbasteln haut das hin.
     
    #15
    AnonymusChaotic gefällt das.