[Linux] Bash-Script für's Verwalten (start/stop/console/...) - implizit - von Minecraft-Server

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [Linux] Bash-Script für's Verwalten (start/stop/console/...) - implizit - von Minecraft-Server

      Hallo,

      auf Grund des Beitrags von Gokage96 habe ich mir erlaubt mein selbst geschriebenes Shell-Script für euch bereitzustellen.
      Zum Einsatz kann es auf Linux-Systemen kommen und ist dafür gemacht einen Prozess mittels einer Kommandozeile in einem (neuen) Screen zu starten,
      einen vorhandenen Screen zu stoppen oder diesen auch aufzurufen.

      Kann ich nur Minecraft-Server damit verwalten oder auch andere Anwendungen?

      Nein, du kannst auch andere Anwendungen damit verwalten.
      Allerdings ist dieses Script angepasst an Minecraft-Server.

      Damit die Welten ordentlich gespeichert werden wird an den Server, in die Konsole zwei Kommandos gesendet.
      'save-all' und danach 'stop'.

      Möchtest du z.B. einen CS:GO-Server damit verwalten, musst du das Script anpassen.
      Bei CS:GO-Servern muss das Script nur 'exit' senden und die Anwendung wird beendet.

      Wie lade ich das Script hoch?

      Nun, unten findest du den Spoiler mit dem Quellcode drin.
      Diesen speicherst du zum Beispiel direkt in deinem Minecraft-Server-Ordner, möglichst als '.sh'-Datei.

      Was muss ich einstellen?

      Nachdem die Datei gespeichert wurde, musst du die Variablen bearbeiten.
      Folgende 4 Variablen sind in Zeile 5 bis 8 vorhanden:

      APPLICATION_NAME="Minecraft-Server"
      SCREEN_NAME="MCServer1"
      EXECUTION_FILE="java -Xmx1024m -Xms512m -jar spigot-1.9.jar"
      EXECUTING_USER="mcserver1"

      APPLICATION_NAME gibt den Anwendungsname an. In diesem Fall 'Minecraft-Server'.

      SCREEN_NAME gibt den Name des Screens an.
      Doppelte und vielfache Namen führen zu Problemen, die vermieden werden müssen.

      EXECUTION_FILE
      In dieser Variable wird die Kommandozeile gespeichert.
      Mit java -Xmx1024m -Xms512m -jar spigot-1.9.jar wird z.B. ein Minecraft-Server gestartet.
      Dabei gibt 'spigot-1.9.jar' die ausführbare Datei an. Hier kann eine beliebige '.jar'-Datei eingegeben werden.

      EXECUTING_USER
      Unter Linux kann man das Benutzerrechtesystem wunderbar auskosten.
      Damit Sicherheitslücken in der gestartete Anwendungen nicht zum "Verhängnis" werden, kann, und sollte man eine Anwendung unter einem separaten Benutzer laufen lassen, als den "root".
      So kann verhindert werden, dass z.B. ein Minecraft-Plugin uns unsere Server-/Welten-Backups oder andere Dateien/Verzeichnisse löscht.

      Du kannst den Server nur als "root" und als den Benutzer bedienen, der in der Variable angegeben ist.

      Wie starte ich den Server?

      Nachdem du alle Variablen korrekt gesetzt hast, kannst du jetzt den Minecraft-Server starten.

      Befehl: ./control.sh start*

      * 'control.sh' stellt die Datei dar, in der du das Script gespeichert hast.

      Wie stoppe ich den Server?

      Befehl: ./control.sh stop

      Wie restarte ich den Server?

      Befehl: ./control.sh restart

      Wie zeige ich den Status des Server an (online/offline)?

      Befehl: ./control.sh status

      Wie kann ich in die Serverkonsole?

      Befehl: ./control.sh console

      Damit du wieder aus der Konsole kommst, musst du STRG + A + D zugleich drücken.

      Vorsicht!! Mit STRG + C würdest du den Server killen. (Ohne die Welt zu speichern).

      Weitere Befehle

      Befehl: ./control.sh cmd "kick BigDaddy"

      Der in den doppelten Anführungszeichen (Gänsefüßchen) geschriebene Befehl würde an den Server gesendet.
      kick BigDaddy würde mich vom Server schmeissen... ;(
      Aber keine Sorge, so heisse ich nicht in Minecraft. :P

      Befehl: ./control.sh help zeigt dir nochmal alle Befehle an.

      Hier ist das Script

      control.sh

      Shell-Script: control.sh

      1. #!/bin/bash
      2. BINDIR=$(dirname "$(readlink -fn "$0")")
      3. cd "$BINDIR"
      4. APPLICATION_NAME="Minecraft-Server"
      5. SCREEN_NAME="MCServer1"
      6. EXECUTION_FILE="java -Xmx1024m -Xms512m -jar spigot-1.9.jar"
      7. EXECUTING_USER="mcserver1"
      8. BINDIR=$(dirname "$(readlink -fn "$0")")
      9. cd "$BINDIR"
      10. case "$1" in
      11. start)
      12. if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
      13. if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
      14. echo -e "\e[91m${APPLICATION_NAME} is already running!";
      15. else
      16. echo -e "\e[94m${APPLICATION_NAME} is starting..."
      17. sudo -u ${EXECUTING_USER} screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
      18. PID=$!
      19. ps -p ${PID} > /dev/null 2>&1
      20. if [ "$?" -ne "0" ]; then
      21. echo -e "\e[91mFailed to start the ${APPLICATION_NAME}!"
      22. fi;
      23. fi
      24. elif whoami | grep -q "${EXECUTING_USER}"; then
      25. if screen -list | grep -q ${SCREEN_NAME}; then
      26. echo -e "\e[91m${APPLICATION_NAME} is already running!"
      27. else
      28. echo -e "\e[94m${APPLICATION_NAME} is starting..."
      29. screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
      30. PID=$!
      31. ps -p ${PID} > /dev/null 2>&1
      32. if [ "$?" -ne "0" ]; then
      33. echo -e "\e[91mFailed to start the ${APPLICATION_NAME}!"
      34. fi;
      35. fi
      36. else
      37. echo -e "\e[91mYou are not permitted to run the ${APPLICATION_NAME}!"
      38. fi
      39. ;;
      40. stop)
      41. if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
      42. if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
      43. echo -e "\e[94m${APPLICATION_NAME} is shutting down! Please wait 3 seconds..."
      44. sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "save-all^M"
      45. sleep 3
      46. sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "stop^M"
      47. else
      48. echo -e "\e[91m${APPLICATION_NAME} isn't running!"
      49. fi
      50. elif whoami | grep -q "${EXECUTING_USER}"; then
      51. if screen -list | grep -q ${SCREEN_NAME}; then
      52. echo -e "\e[94m${APPLICATION_NAME} is shutting down! Please wait 3 seconds..."
      53. screen -S ${SCREEN_NAME} -X stuff "save-all^M"
      54. sleep 3
      55. screen -S ${SCREEN_NAME} -X stuff "stop^M"
      56. else
      57. echo -e "\e[91m${APPLICATION_NAME} isn't running!"
      58. fi
      59. else
      60. echo -e "\e[91m$You are not permitted to stop the ${APPLICATION_NAME}!"
      61. fi
      62. ;;
      63. restart)
      64. if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
      65. if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
      66. echo -e "\e[94m${APPLICATION_NAME} is restarting! Please wait a few seconds..."
      67. sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "save-all^M"
      68. sleep 3
      69. sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "stop^M"
      70. sleep 3
      71. sudo -u ${EXECUTING_USER} screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
      72. PID=$!
      73. ps -p ${PID} > /dev/null 2>&1
      74. if [ "$?" -ne "0" ]; then
      75. echo -e "Failed to start the ${APPLICATION_NAME}!"
      76. fi;
      77. else
      78. echo -e "\e[91m${APPLICATION_NAME} isn't running!"
      79. fi
      80. elif whoami | grep -q "${EXECUTING_USER}"; then
      81. if screen -list | grep -q ${SCREEN_NAME}; then
      82. echo -e "\e[94m${APPLICATION_NAME} is restarting! Please wait a few seconds..."
      83. screen -S ${SCREEN_NAME} -X stuff "save-all^M"
      84. sleep 3
      85. screen -S ${SCREEN_NAME} -X stuff "stop^M"
      86. sleep 3
      87. screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
      88. PID=$!
      89. ps -p ${PID} > /dev/null 2>&1
      90. if [ "$?" -ne "0" ]; then
      91. echo -e "\e[91mFailed to start the ${APPLICATION_NAME}!"
      92. fi;
      93. else
      94. echo -e "\e[91m${APPLICATION_NAME} isn't running!"
      95. fi
      96. else
      97. echo -e "\e[91m$You are not permitted to restart the ${APPLICATION_NAME}!"
      98. fi
      99. ;;
      100. status)
      101. if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
      102. if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
      103. echo -e "\e[92m${APPLICATION_NAME} is running!"
      104. else
      105. echo -e "\e[91m${APPLICATION_NAME} isn't running!"
      106. fi
      107. elif whoami | grep -q "${EXECUTING_USER}"; then
      108. if screen -list | grep -q ${SCREEN_NAME}; then
      109. echo -e "\e[92m${APPLICATION_NAME} is running!"
      110. else
      111. echo -e "\e[91m${APPLICATION_NAME} isn't running!"
      112. fi
      113. else
      114. echo -e "\e[91m$You are not permitted to view the status of the ${APPLICATION_NAME}!"
      115. fi
      116. ;;
      117. console)
      118. if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
      119. if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
      120. sudo -u ${EXECUTING_USER} script -q -c "screen -rxS ${SCREEN_NAME}"
      121. else
      122. echo -e "\e[91m${APPLICATION_NAME} isn't running!"
      123. fi
      124. elif whoami | grep -q "${EXECUTING_USER}"; then
      125. if screen -list | grep -q ${SCREEN_NAME}; then
      126. script -q -c "screen -rxS ${SCREEN_NAME}"
      127. else
      128. echo -e "\e[91m${APPLICATION_NAME} isn't running!"
      129. fi
      130. else
      131. echo -e "\e[91m$You are not permitted to open the console of the ${APPLICATION_NAME}!"
      132. fi
      133. ;;
      134. cmd)
      135. if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
      136. if su -c "screen -list" -s /bin/sh ${EXECUTING_USER} | grep -q ${SCREEN_NAME}; then
      137. echo -e "\e[94mCommand sent."
      138. sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "$2^M"
      139. else
      140. echo -e "\e[91m${APPLICATION_NAME} isn't running!"
      141. fi
      142. elif whoami | grep -q "${EXECUTING_USER}"; then
      143. if screen -list | grep -q ${SCREEN_NAME}; then
      144. echo -e "\e[94mCommand sent."
      145. screen -S ${SCREEN_NAME} -X stuff "$2^M"
      146. else
      147. echo -e "\e[91m${APPLICATION_NAME} isn't running!"
      148. fi
      149. else
      150. echo -e "\e[91m$You are not permitted to open the console of the ${APPLICATION_NAME}!"
      151. fi
      152. ;;
      153. help)
      154. case "$2" in
      155. start)
      156. echo -e "\e[93mUse: \"${0} ${2}\" to start ${APPLICATION_NAME}."
      157. ;;
      158. stop)
      159. echo -e "\e[93mUse: \"${0} ${2}\" to stop ${APPLICATION_NAME}."
      160. ;;
      161. status)
      162. echo -e "\e[93mUse: \"${0} ${2}\" to show ${APPLICATION_NAME} is online or offline."
      163. ;;
      164. console)
      165. echo -e "\e[93mUse: \"${0} ${2}\" to go into ${APPLICATION_NAME}-Console."
      166. ;;
      167. cmd)
      168. echo -e "\e[93mUse: \"${0} ${2} <Command>\" to send command into ${APPLICATION_NAME} Console-Application."
      169. ;;
      170. *)
      171. echo -e "\e[93mUse: \"${0} help {start|stop|status|console|cmd}\" for details"
      172. esac
      173. ;;
      174. *)
      175. echo -e "\e[93mUsage: ${0} {start|stop|restart|status|console|cmd|help}"
      176. exit 1
      177. esac
      178. exit 0
      Alles anzeigen





      Ich hoffe ich konnte euch mit meinem Shell-Script für Minecraft-Server helfen. ^^ ^^
      BigDaddy // Mike
      IT-Fachinformatik / Praktische-Anwendungsentwicklung

      Support@7nz.de | BigDaddy@7nz.de