Debian Script - Minecraft Server automatisch wieder starten

4 Antworten

versuche herauszubekommen, ob Debian noch das "alte" init verwendet. Dabei kann man durch Einträge in der Datei /etc/inittab Prozesse starten und init überwacht diese. Sollte so ein Prozess terminieren, wird er sofort wieder gestartet (wenn das zu oft vorkommt, wartet init eine bestimmte Zeit bis zum erneuten Aufruf)

Trage einfach das Script oder Binary dort ein. Das könnte so aussehen:

MS:23:respawn:<Pfad+ProgrammName>   <Parameter>

Dabei ist MS nur eine Kennung, hier MinecraftServer

23 bedeutet, dass es in den Runlevel'n 2 und 3 laufen soll ( runlevel zeigt dir den aktuellen an )

respawn bedeutet, dass es immer wieder aufgerufen werden soll

Pfad+Name , dafür keine Erklärung

Parameter sind optional

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995
brichter98 
Fragesteller
 10.08.2013, 17:27

Hey,

vielen Dank für die Antwort. Ich habe eine start.sh Datei, die den Server via Screen (screen -A -m -d -S java usw.) startet. Diese Datei liegt in /home/servernetzwerk/server/survivalgames/ Verzeichnis. Also müsste ich da das eintragen:

MS:23:respawn:/home/servernetzwerk/server/survivalgames/start.sh

oder?

0
guenterhalt  10.08.2013, 18:33
@brichter98

prinzipiell ist das richtig. Ich weiß natürlich nicht, welche Runlevel in deinem System definiert sind. Bei SuSE ist Runlevel-3 der ohne Grafik ( kein X-Server), der Runlevel-5 ist der mit X-Server. Es kann nicht schaden, an Stelle der 23 2345 einzutragen.

Probiere es aus.

Wenn du die /etc/inittab geändert hast, dann starte init neu mit

kill -1 1

oder aber die ganze Kiste neu booten, was aber zeitaufwendig ist.

0
brichter98 
Fragesteller
 11.08.2013, 00:24
@guenterhalt

Achso okay aber ich habe das nicht mit kill -1 1 gemacht sondern einfach nur gestoppt den Server und er ist danach nicht wieder gestartet. Daraufhin kam mir dann die Idee eines Shellscripts mit Whileschleife, welches ich so gemacht habe:

#!/bin/bash
while :
do
if [ -e /home/servernetzwerk/server/survivalgames/server.log.lck ]; then
sleep 5
else
echo "Der SG1 Server wurde neu gestartet!"
cd /home/servernetzwerk/server/survivalgames/
screen -A -m -d -S survivalgamesserver java -Xmx1024M -Xms1024M -jar craftbukkit.jar
/root/ramclean.sh
sleep 5
fi
done

Dieses Script prüft somit alle 5 Sekunden (sleep 5), ob die server.log.lck vorhanden ist, diese Datei wird ja immer beim hochfahren erstellt und beim stoppen bzw. wenn der Server erfolgreich gestoppt wurde gelöscht.

Somit startet der dann neu, wenn der Server runtergefahren ist. Welche Methode ist jetzt besser oder schonender bzw. beansprucht weniger Serverleistung / funktioniert besser?

Ich möchte später auf einem 32 GB RAM Root (jetzt noch 4 GB RAM vServer) ein Servernetzwerk mit einigen Servern machen.

0

dafür brauchst du kein skript. ein einfaches 'sudo shutdown -r now' reicht um den server neu zu starten. Danach kannst du dich per ssh wieder einloggen und mit systemctl entsprechende Dienste starten.

brichter98 
Fragesteller
 10.08.2013, 01:20

Aber das startet doch den ganzen Root neu und ich habe darauf ja dann ein Servernetzwerk laufen und es soll ja nur der eine Server nach der Runde neu gestartet werden. Das SG Plugin und eigene Spielmodi, sowie die Lobby usw. habe ich ja schon selbst programmiert. Ich möchte nur noch am Ende die Welt resetten und WorldReset funktioniert perfekt, wenn man den Server stoppt und hochfährt ist die Welt richtig resettet nur das hochfahren nach dem stoppen ist derzeit noch mein Problem

0

#!/bin/bash

start() { echo "Starting Server..." rm -rf world mkdir world cp -r custom/* world java -Xms640M -Xmx640M -jar (!!!HIERJARNAME!!!) start } start

ist von @Freemine

Ich benutze das hier für meinen Server: #!/bin/bash

start() { echo "Starting Server..." rm -rf world mkdir world cp -r custom/* world java -Xms640M -Xmx640M -jar craftbukkit.jar start } start

Dann musst du nur deine Welt in den Ordner custom kopieren.