Probleme beim gleichzeitigen Starten von Minecraft-Servern mit einem Bash-Skript
Warum startet mein Bash-Skript nur den ersten Minecraft-Server und nicht die anderen?
Es scheint, dass das von dir erstellte Bash-Skript nur den ersten Minecraft-Server startet und die anderen nicht. Die Ursache dafür liegt wahrscheinlich darin ebenso wie die Befehle im Skript ausgeführt werden und wie die Prozesse gesteuert werden. Es gibt mehrere Gründe warum das Skript nicht wie gewünscht funktioniert allerdings ich kann dir helfen, das Problem zu lösen.
Das Skript, das du gepostet hast, umfasst mehrere Befehle, die welche verschiedenen Minecraft-Server starten sollen. Zunächst wird der BungeeCord-Proxyserver gestartet, gefolgt von der Lobby und einem weiteren Server CB1. Der Hauptgrund warum die weiteren Server nicht gestartet werden liegt in der Art und Weise wie die Befehle ausgeführt werden.
Wenn du ein Programm oder Skript mit dem Befehl "java -jar" startest blockiert dieser Befehl normalerweise den Ausführungsprozess bis das Programm beendet ist. Das bedeutet: Dass die Befehle für die anderen Server erst ausgeführt werden wenn der vorherige Befehl vollständig beendet wurde. Deshalb startet nur der BungeeCord-Proxyserver, während die anderen Befehle in der Warteschlange bleiben.
Um dieses Problem zu lösen gibt es verschiedene Möglichkeiten. Eine davon ist die Verwendung von Hintergrundprozessen. Wie dein Helfer bereits angemerkt hat, fehlt hinter dem Befehl "java -jar" das Zeichen "&", das bewirkt: Der Befehl im Hintergrund ausgeführt wird. Dadurch wird der Ausführungsprozess nicht blockiert und die nachfolgenden Befehle können sofort ausgeführt werden.
Hier ist eine korrigierte Version deines Skripts:
```bash
echo "Starting Proxy"
screen -dmS Proxy java -jar Server-Netzwerk/Proxy/Bungee*.jar &
echo "Waiting 10 Seconds"
sleep 10
echo "Starting Lobby"
screen -dmS Lobby java -jar Server-Netzwerk/Lobby/spigot.jar &
echo "Waiting 30 Seconds"
sleep 30
echo "Starting CB1″
screen -dmS CB1 java -jar Server-Netzwerk/CB1/spigot.jar &
echo "Waiting 30 Seconds"
sleep 30
if screen -list | grep "Proxy"; then
echo "Server Proxy is online"
else
echo "Server Proxy failed to start"
fi
if screen -list | grep "Lobby"; then
echo "Server Lobby is online"
else
echo "Server Lobby failed to start"
fi
if screen -list | grep "CB1"; then
echo "Server CB1 is online"
else
echo "Server CB1 failed to start"
fi
```
Durch das Hinzufügen von "&" nach jedem Befehl für das Starten der Server wird sichergestellt, dass sie im Hintergrund ausgeführt werden und nicht die Ausführung der nachfolgenden Befehle blockieren.
Ich hoffe, dass diese Korrektur deines Skripts dazu führt, dass alle deine Minecraft-Server erfolgreich gestartet werden. Beachte aber: Dass dies nur eine der möglichen Lösungen für dein Problem ist und es ebenfalls andere Ansätze geben kann um das gewünschte Ergebnis zu erzielen.
Das Skript, das du gepostet hast, umfasst mehrere Befehle, die welche verschiedenen Minecraft-Server starten sollen. Zunächst wird der BungeeCord-Proxyserver gestartet, gefolgt von der Lobby und einem weiteren Server CB1. Der Hauptgrund warum die weiteren Server nicht gestartet werden liegt in der Art und Weise wie die Befehle ausgeführt werden.
Wenn du ein Programm oder Skript mit dem Befehl "java -jar" startest blockiert dieser Befehl normalerweise den Ausführungsprozess bis das Programm beendet ist. Das bedeutet: Dass die Befehle für die anderen Server erst ausgeführt werden wenn der vorherige Befehl vollständig beendet wurde. Deshalb startet nur der BungeeCord-Proxyserver, während die anderen Befehle in der Warteschlange bleiben.
Um dieses Problem zu lösen gibt es verschiedene Möglichkeiten. Eine davon ist die Verwendung von Hintergrundprozessen. Wie dein Helfer bereits angemerkt hat, fehlt hinter dem Befehl "java -jar" das Zeichen "&", das bewirkt: Der Befehl im Hintergrund ausgeführt wird. Dadurch wird der Ausführungsprozess nicht blockiert und die nachfolgenden Befehle können sofort ausgeführt werden.
Hier ist eine korrigierte Version deines Skripts:
```bash
echo "Starting Proxy"
screen -dmS Proxy java -jar Server-Netzwerk/Proxy/Bungee*.jar &
echo "Waiting 10 Seconds"
sleep 10
echo "Starting Lobby"
screen -dmS Lobby java -jar Server-Netzwerk/Lobby/spigot.jar &
echo "Waiting 30 Seconds"
sleep 30
echo "Starting CB1″
screen -dmS CB1 java -jar Server-Netzwerk/CB1/spigot.jar &
echo "Waiting 30 Seconds"
sleep 30
if screen -list | grep "Proxy"; then
echo "Server Proxy is online"
else
echo "Server Proxy failed to start"
fi
if screen -list | grep "Lobby"; then
echo "Server Lobby is online"
else
echo "Server Lobby failed to start"
fi
if screen -list | grep "CB1"; then
echo "Server CB1 is online"
else
echo "Server CB1 failed to start"
fi
```
Durch das Hinzufügen von "&" nach jedem Befehl für das Starten der Server wird sichergestellt, dass sie im Hintergrund ausgeführt werden und nicht die Ausführung der nachfolgenden Befehle blockieren.
Ich hoffe, dass diese Korrektur deines Skripts dazu führt, dass alle deine Minecraft-Server erfolgreich gestartet werden. Beachte aber: Dass dies nur eine der möglichen Lösungen für dein Problem ist und es ebenfalls andere Ansätze geben kann um das gewünschte Ergebnis zu erzielen.