ubuntuusers.de

autostart minecraft server

Status: Ungelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

Fansana

Anmeldungsdatum:
30. August 2014

Beiträge: 17

Hallo liebes Ubuntu Forum. Ich hab eine Frage. Und zwar suche ich nach einer Möglichkeit einen Minecraft Server beim Systemstart mit starten zu lassen. Das ganz ist nicht so einfach wie es klingen mag, denn jeder Minecraft server gehört einem anderen Benutzer.

Ich erklären erst einmal wie meine Struktur aussieht. Ich habe einen Benutzer der alle Minecraft server verwaltet: GameServer In dessen home Verzeichnis befinden sich die Unterverzeichnisse aller anderen Minecraft benutzer. GameServer ist in allen Gruppen der Minecraft Benutzer. Die jeweilige Benutzer Gruppe hat die gleichen rechte wie der Benutzer.

GameServer
-\server1 (von Hans)
-\server2 (von Peter)
-\server3 (von mir)
-\server4 (von Sonstwem)

In diesen Ordner befinden sich verschidene Minecraft server. Starten tut man den Server mit der ServerStart.sh in der die ganzen Java Parameter festgelegt sind.

So das eigentliche Problem ist , und wobei ich hilfe brauch ist, die Herstellung eines Autostart Scripts das jeden Server innerhalb eines screens startet und diesen dann wieder freigibt so das sich der Nutzer gegebenen falls auch auf den screen schalten kann.

Ich habe dieses setup jetzt schon seit 2 Monaten und ich hab keine Lust jeden Morgen um 4:05 aufzustehen und jeden Server einzeln zu starten. o.o

Ich weiß das dieses Problem sehr spezifisch, ich hoffe ihr könnt mir helfen denn nach unzähligen Stunden mit bash tuturials komme ich immer noch nicht dahinter wie das genau funktioniert.

defc0n

Anmeldungsdatum:
21. Mai 2014

Beiträge: 30

Hallo Fansana

Mach mal zuerst ein start/stop-Script (hier mit vi, du kannst auch nano verwenden):

vi /etc/init.d/minecraft_bukkit-server

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#########################
# Config bitte anpassen #
#########################
user=minecraft
base_dir=/home/minecraft
screen=minecraft-bukkit
jar_file=/bukkit-server_1.7/craftbukkit-1.7.2-R0.3.jar

##################
# Script-Bereich #
##################
script_path=${base_dir}/
init_log=${base_dir}/logs/minecraft.init.log

case "$1" in
        start)
                sudo -u ${user} screen -A -dmS ${screen} java -Xmx1024M -Xms1024M -jar ${base_dir}${jar_file} >> ${init_log}
        ;;
        restart)
                sudo -u ${user} screen -X -S ${screen} quit >> ${init_log}
                sudo -u ${user} screen -A -dmS ${screen} java -Xmx1024M -Xms1024M -jar ${base_dir}${jar_file} >> ${init_log}
        ;;
        stop)
                sudo -u ${user} screen -X -S ${screen} quit >> ${init_log}
        ;;
        *)
                echo "Usage: /etc/init.d/minecraft_bukkit-server {start|stop|restart}"
                exit 1
        ;;
esac

Passe deinen User (hier minecraft), Pfad (hier /home/minecraft), screen-name (hier minecraft-bukkit) und den Pfad zum jar-file an (hier /bukkit-server_1.7/craftbukkit-1.7.2-R0.3.jar).

Das ganze soll nun auch ausführbar werden:

1
chmod +x /etc/init.d/minecraft_bukkit-server

Du kannst nun den Server starten, stoppen, restarten mit

1
service minecraft_bukkit-server start|restart|stop

Nun muss es noch auto-starten:

vi /etc/init/minecraft_bukkit-server.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
start on (runlevel [2345])
stop on (runlevel [!2345])

pre-start script
/etc/init.d/minecraft_bukkit-server start
end script

post-stop script
/etc/init.d/minecraft_bukkit-server stop
end script

Du musst diese Schritte für jeden einzelnen User durchführen, benenne deine Files dementsprechend (vielleicht möchtest du das später mal parametrisieren)

Nach dem Neustart läuft der Server unter dem entsprechenden User.

Du kannst das prüfen, indem du

1
sudo -u minecraft screen -ls

eingibst (natürlich mit deinem user statt mit minecraft)

Fansana

(Themenstarter)

Anmeldungsdatum:
30. August 2014

Beiträge: 17

Vielen Dank schonmal für die hilfe. Das einzige Problem was ich habe ist das der screen für den user zugänglich seien muss. Wie würde ich das hinbekommen.

defc0n

Anmeldungsdatum:
21. Mai 2014

Beiträge: 30

Wie im Script beschrieben:

sudo -u ${user} screen ...

Im Beispiel ist der User 'minecraft'. minecraft kann sich somit an der Konsole anmelden und sieht 'seinen' screen.

Fansana

(Themenstarter)

Anmeldungsdatum:
30. August 2014

Beiträge: 17

Ich habe das ganze mal durch gespielt und ich komme nicht auf den screen drauf. Mach ich etwas falsch?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
root@:~# sudo -u mineprivate screen -A -dmS gameServer1 java -Xmx4GM -Xms1G -jar /home/mineprivate/server2/minecraft.jar >> /home/mineprivate/server2/logs/minecraft.init.log

root@:~# su mineprivate

mineprivate@:/root$ cd

mineprivate@:~$ screen -ls

No Sockets found in /var/run/screen/S-mineprivate.

mineprivate@v22014082315519722:~$ 

defc0n

Anmeldungsdatum:
21. Mai 2014

Beiträge: 30

Auf den ersten Blick stimmt alles, habs gemäss deinen Schritten nochmals nachgeprüft.

  • Schau, ob das logs-Verzeichnis da ist (sonst leg es an) oder lösche den Logging-Teil mal zum Test (schreibt bei mir sowieso nichts rein).

  • Findest du Fehler in den anderen logs (syslog, auth.log)?

  • Prüfe mit 'ps aux', ob du den Prozess findest

  • Starte ohne screen und schau, obs geht: sudo -u mineprivate java -Xmx4GM -Xms1G -jar /home/mineprivate/server2/minecraft.jar

Gib Bescheid, falls es immer noch nicht funktioniert.

Fansana

(Themenstarter)

Anmeldungsdatum:
30. August 2014

Beiträge: 17

Ich habe das script mal ein wenig angepasst das Problem ist nur das es nicht funktioniert. .-. Das ganze mach ich deshalb weil der User sein script auch selber starten darf/muss.

Code 
#!/bin/bash 
#########################
# Config bitte anpassen #
#########################
user=rpgserver
base_dir=/home/mineprivate/server7
screen=mineServer7
jar_file=minecraft.jar
##################
# Script-Bereich #
##################
script_path=${base_dir}/
init_log=${base_dir}/logs/minecraft.log

case $1 in
        start)
                sudo -u ${user} screen -A -dmS ${screen} java -Xmx1024M -Xms1024M -jar ${base_dir}/${jar_file}
        ;;
        restart)
                sudo -u ${user} screen -X -S ${screen} quit
                sudo -u ${user} screen -A -dmS ${screen} java -Xmx1024M -Xms1024M -jar ${base_dir}/${jar_file}
        ;;
        stop)
                sudo -u ${user} screen -X -S ${screen} quit
        ;;
        *)
                echo "Usage: ./ServerStart {start|stop|restart}"
                exit 1
        ;;
esac

Wenn ich das ganze dann mit ./ServerStart start starten will sagt er mir : No such file or directory

Mallalei

Anmeldungsdatum:
21. September 2017

Beiträge: 1

Fansana schrieb:

Ich habe das script mal ein wenig angepasst das Problem ist nur das es nicht funktioniert. .-. Das ganze mach ich deshalb weil der User sein script auch selber starten darf/muss.

Code 
#!/bin/bash 
#########################
# Config bitte anpassen #
#########################
user=rpgserver
base_dir=/home/mineprivate/server7
screen=mineServer7
jar_file=minecraft.jar
##################
# Script-Bereich #
##################
script_path=${base_dir}/
init_log=${base_dir}/logs/minecraft.log

case $1 in
        start)
                sudo -u ${user} screen -A -dmS ${screen} java -Xmx1024M -Xms1024M -jar ${base_dir}/${jar_file}
        ;;
        restart)
                sudo -u ${user} screen -X -S ${screen} quit
                sudo -u ${user} screen -A -dmS ${screen} java -Xmx1024M -Xms1024M -jar ${base_dir}/${jar_file}
        ;;
        stop)
                sudo -u ${user} screen -X -S ${screen} quit
        ;;
        *)
                echo "Usage: ./ServerStart {start|stop|restart}"
                exit 1
        ;;
esac

Wenn ich das ganze dann mit ./ServerStart start starten will sagt er mir : No such file or directory

kommt vll etwas spät, aber ich hab mir den script von dem Kamerad mal als Grundmodel genommen und auf den ServerStart.sh script von den Forge Servern angepasst, bei mir funktioniert er. Hier:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#########################
# Config bitte anpassen #
#########################
user=minecraft
base_dir=/home/minecraft/sky3
screen=sky
sh_file=/ServerStart.sh

##################
# Script-Bereich #
##################
script_path=${base_dir}/
init_log=${base_dir}/logs/minecraft.init.log

case "$1" in
        start)
                sudo -u ${user} screen -A -dmS  ${screen} ${base_dir}${sh_file} >> ${init_log}
		echo "Server wird gestartet..."
		sleep 70
		echo "Server wurde gestartet!"
	;;
        restart)
                sudo -u ${user} screen -X -S ${screen} quit >> ${init_log}
                sudo -u ${user} screen -A -dmS ${screen} ${base_dir}${sh_file} >> ${init_log}
        	echo "Server wird neugestartet..."
		sleep 1
		echo "Server gestoppt..."
		sleep 1
		echo "Neustart wird vorbereitet..."
		sleep 70
		echo "Server wurde gestartet!"
	;;
        stop)
                sudo -u ${user} screen -X -S ${screen} quit >> ${init_log}
        	echo "Server gestoppt"
	;;
        *)
                echo "Usage: /etc/init.d/minecraft {start|stop|restart}"
                exit 1
        ;;
esac

ich habe ein paar Echos hinzugefügt einfach um dem Benutzer eine kleine Rückmeldung zu geben das etwas passiert, weil ansonsten einfach ne neu Befehlszeile kam und das wars =) Ansonsten wie schonmal angesprochen alles unter Config anpassen, bitte anpassen. User / Pfad/ screen Name etc Solltest du das ganze jetzt an den Systemstart hängen, lass die echos und die sleeps weg =)

Viel Erfolg

Mokkujin

Anmeldungsdatum:
2. Mai 2008

Beiträge: 389

Wohnort: Hannover

Ich mach das immer lieber über Funktionen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash

#########################
# Config bitte anpassen #
#########################
user=minecraft
screen=sky

##################
# Script-Bereich #
##################

script_path=$(dirname "$(readlink -f "${0}")")
script=${script_path}/$(basename "${0}")
init_log=${script_path}/logs/minecraft.init.log

function do_start {
        echo "Es wird versucht den Server zu starten ..."
        if [ -f "${script}" ]; then
                #sudo -u ${user} screen -A -dmS  ${screen} ${script} >> ${init_log}
                if [ $? -ne 0  ]; then
                        echo "Server konnte nicht gestartet werden ..."
                        exit 1
                else
                        echo "Server wurde gestartet ..."
                fi
        else

                echo "Kann das Startskript (${script}) leider nicht finden ..."
                exit 1
        fi
}

function do_stop {
        echo "Der Server wird beendet ..."
        #sudo -u ${user} screen -X -S ${screen} quit >> ${init_log}
        if [ $? -ne 0  ]; then
                 echo "Server konnte nicht beendet werden ..."
                 exit 1
        else
                echo "Server wurde beendet"
        fi
}

case "$1" in
        start)
                do_start
        ;;
        restart)
                do_stop
                do_start
        ;;
        stop)
                do_stop
        ;;
        *)
                echo "Usage: ${0}  {start|stop|restart}"
                exit 1
        ;;
esac
Antworten |