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

Minecraft Server start-skript für Linux

toemsel1

Schafhirte
Registriert
9 August 2012
Beiträge
115
Diamanten
300
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:
#!/bin/bash
cd "${0%/*}"; java -Xms512M -Xmx6144M -jar spigot18.jar


An diesem Skript arbeite ich gerade:
Code:
#!/bin/bash

###Config
minram="512"
maxram="6144"
servername="lobby"
server="$servername"_"$number"_"$port"
servers="lobbys"
number="1"
userm="user"
game="minecraft"
software="spigot"

email="[email protected]" ### Geht noch ned ###

backuppath="home/backup/$games"
gamepath="home/$game/"

###Ende Config

cd /$gamepath/$servers/"$server"_"$number"_"$port"
case "$1" in
start)
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 ###
echo "Welten werden Kopiert..."
cp /$gamepath/plugins/$server/$server$number /$gamepath/$servers/"$server"_"$number"_"$port"/plugins/
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 ###
echo "Plugins werden Kopiert..."
echo "Start Server "$number""$server" on Port $port..."
screen -A -m -d -S "$number""$server" java -Xms"$minram"M -Xmx"$maxram"M -jar "$software".jar
exit 0
;;
stop)
su $userm -c "screen -rx "$number""$server" -X quit"
rm /$gamepath/$server/"$server"_"$number"_"$port"/$server ### welt soll gelöscht werden (wird ja beim start reinkopiert)###
rm /$gamepath/$server/"$server"_"$number"_"$port"/plugins ### plugins werden gelöscht ###
rm /$gamepath/$server/"$server"_"$number"_"$port"/"$server"_nether ### welt wird gelöscht ###
rm /$gamepath/$server/"$server"_"$number"_"$port"/"$server"_the_end ### welt wird gelöscht ###
mkdir /$gamepath/$server/"$server"_"$number"_"$port"/plugins ### der ordner plugins wird erstellt ###
echo "Stop Server "$server"-"$number" on Port $port..."
exit 0
;;
restart)
$0 stop && $0 start
exit 0
;;
see)
screen -r $number$server
exit 0
;;
clear)
echo -n > /$gamepath/$servers/"$server"_"$number"_"$port"/server.log
echo "server.log wurden geleert."
;;
backup)
tar cfv /$backuppath/$server/serverbackup.tar /$gamepath/$servers/
echo "Serverbackup beendet! Beginne mit dem komprimieren."
gzip /home/lexat/backups/mc_backups/serverbackup.tar
echo "Das eben erstellte Backup wurde erfolgreich komprimiert."
;;
*)
echo "Use (start|restart|stop|see|clear|backup)"
;;
esac
exit 0

1.Frage: die Variable servername funktioniert diese so:
Code:
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
 

toemsel1

Schafhirte
Registriert
9 August 2012
Beiträge
115
Diamanten
300
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:
#!/bin/bash

###Config
minram="512"
maxram="6144"
servername="lobby"
servers="lobbys"
number="3"
port="20024"
userm="root"
game="minecraft"
software="spigot"
version="18"

server="${servername}_${number}_${port}"

email="[email protected]" ###geht nochg ned.

backuppath="home/backup/$games"
gamepath="home/$game"

###Ende Config

cd /$gamepath/$servers/$server
case "$1" in
start)
cp /$gamepath/world/$servername/$servername/ /$gamepath/$servers/$server
echo -e "\e[96mWelten werden Kopiert...\e[0m"
cp /$gamepath/plugins/$servername/$servername$number/plugins/ /$gamepath/$servers/$server/plugins/
cp /$gamepath/plugins/$servername/allgemein/plugins/ /$gamepath/$servers/$server/plugins/ 
echo -e "\e[96mPlugins werden Kopiert \e[5m...\e[0m"
echo -e "\e[96mStart server "$number""$servername" on Port $port \e[5m...\e[0m"
screen -A -m -d -S "$number""$servername" java -Xms"$minram"M -Xmx"$maxram"M -jar "$software""$version".jar
exit 0
;;
stop)
screen -S "$number""$servername" -X stuff $'save-all\n'
echo -e "\e[96mDer Save-All-Befehl wurde an den Server gesendet.\e[0m"
screen -S"$number""$servername" -X stuff $'stop\n'
echo -e "\e[96mDer Stop-Befehl wurde an den Server gesendet.\e[0m"
cp /$gamepath/$servers/$server/playerdata /$gamepath/world/$servername/$servername/
su $userm -c "screen -rx "$number""$servername" -X quit"
rm /$gamepath/$servername/$server/$servername/
rm /$gamepath/$servername/$server/plugins
rm /$gamepath/$servername/$server/"$servername"_nether
rm /$gamepath/$servername/$server/"$servername"_the_end
mkdir /$gamepath/$servername/$server/plugins
echo -e "\e[96mStop server "$servername"-"$number" on Port $port \e[5m...\e[0m"
exit 0
;;
restart)
$0 stop && $0 start
exit 0
;;
see)
screen -r $number$servername
exit 0
;;
clear)
echo -n > /$gamepath/$servers/$server/server.log
echo -e "\e[96mServer.log wurden geleert.\e[0m"
;;
backup)
tar cfv /$backuppath/$servername/backup_"$servername"_"$number".tar /$gamepath/$servers/$server
echo -e "\e[96mserverbackup beendet! Beginne mit dem komprimieren.\e[0m"
gzip /$backuppath/$servername/serverbackup.tar
echo -e "\e[96mDas eben erstellte Backup wurde erfolgreich komprimiert.\e[0m"
;;
export)
echo -e "\e[96mDieser Befehl geht noch nicht. In Arbeit\e[0m"
;;
*)
echo -e "\e[96mUse ( start | restart | top | see | clear | backup | export )\e[0m"
;;
esac
exit 0

Ein problem hab ich noch.

beim cp Befehl wird mir der Plugins Ordner ned kopiert
 
Zuletzt bearbeitet von einem Moderator:

Bl4ckSkull666

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

Code:
cp /$gamepath/$servers/$server/playerdata /$gamepath/world/$servername/$servername/
wird zu :
cp "/${gamepath}/${servers}/${server}/playerdata" "/${gamepath}/world/${servername}/${servername}/"
Wende das im gesamten Scipt mal an...Dann klappt es auch besser und Variablen sind deutlich lesbar und sichtbar auch für die bash.
 

toemsel1

Schafhirte
Registriert
9 August 2012
Beiträge
115
Diamanten
300
Minecraft
toemsel1
Hab es jetzt so gemacht wie du gesagt hast.

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

Code:
./start_minecraft.sh start
cp: omitting directory `/home/minecraft/worlds/lobby/lobby/'
Welten werden Kopiert...
cp: omitting directory `/home/minecraft/plugins/lobby/lobby3/plugins'
cp: omitting directory `/home/minecraft/plugins/lobby/allgemein/plugins'
Plugins werden Kopiert ...
Start server 3lobby on Port 20024 ...

Komischerweiße kopiert das skript mir die dateien ned.
 
Zuletzt bearbeitet:

NoWayOut

Minecrafter
Registriert
28 Januar 2012
Beiträge
20
Diamanten
0
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>)
 

NoWayOut

Minecrafter
Registriert
28 Januar 2012
Beiträge
20
Diamanten
0
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)
 

toemsel1

Schafhirte
Registriert
9 August 2012
Beiträge
115
Diamanten
300
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
 
Oben