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

Bungeecorde Netzwerk neustarten

iTzTrappY

Minecrafter
Registriert
26 April 2018
Beiträge
2
Alter
29
Diamanten
300
Minecraft
iTzTrappY
Guten Tag,
gibt es eine Möglichkeit über Bungeecord das komplette Server-Netzwerk neuzustarten?
Sprich z.B. man gibt /neustart ein und das komplette Server-Netzwerk startet neu.

Für jede hilfe wäre ich sehr dankbar.

Mit freundlichen Grüßen,
iTzTrappY
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Dort musst du schon eine externe Methode finden. Denn die Server müssen alle runtergefahren werden, dann gewartet bis alle beendet sind und dann wieder neu gestartet. Und das ist natürlich sehr speziell für deine Umgebung bezüglich Screens (oder ähnliches) und Startscripte.
 

Etrayed

Minecrafter
Registriert
12 Mai 2018
Beiträge
8
Alter
21
Diamanten
300
Hallo,

ich glaube, das hier ist das was du suchst um das Netzwerk neu zu starten:

Code:
BungeeCord.getInstance().getScheduler().schedule(this, () -> {
            try {
                Runtime.getRuntime().exec("cmd /c start " + <Start-Datei>);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }, 1500, TimeUnit.MILLISECONDS);
        BungeeCord.getInstance().getPlayers().forEach(players -> {
            players.disconnect(new TextComponent(<Deine Kicknachricht>));
        });
        BungeeCord.getInstance().stop();

Wenn du auch die Unterserver herunterfahren willst, würde ich dir empfehlen mit PluginMessaging zu arbeiten! Guck dir dazu einfach ein Tutorial auf YouTube an! Beachte aber, dass du die Methode
Code:
BungeeCord.getInstance().stop();
ganz am Schluss aufrufst, denn diese stoppt das komplette Programm/Netzwerk!

Mit freundlichen Grüßen,

Etrayed | Miklas
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
@Etrayed Dein Code startet einen Task, der 1500 ms später einen Shell-Befehl ausführt und stoppt dann den BungeeCord. Das Stoppen führt aber natürlich auch dazu, dass alle Tasks sofort beendet werden und somit dieser Shell-Befehl nicht ausgeführt wird.

Das sichere Neustarten eines Servernetzwerks ist weitaus komplexer:
  1. Stoppen des BungeeCord
  2. Stoppen der Spigot-Server
  3. Warten, dass sich alle Server beendet haben (Hier nicht einfach nur 10 Sekunden warten, sondern auf das Beenden der Prozesse)
  4. Starten der Spigot-Server
  5. Warten, dass sich alle Spigot-Server gestartet haben
  6. Starten des BungeeCord
 

Etrayed

Minecrafter
Registriert
12 Mai 2018
Beiträge
8
Alter
21
Diamanten
300
Dein Code startet einen Task, der 1500 ms später einen Shell-Befehl ausführt und stoppt dann den BungeeCord. Das Stoppen führt aber natürlich auch dazu, dass alle Tasks sofort beendet werden und somit dieser Shell-Befehl nicht ausgeführt wird.

Das sichere Neustarten eines Servernetzwerks ist weitaus komplexer:
  1. Stoppen des BungeeCord
  2. Stoppen der Spigot-Server
  3. Warten, dass sich alle Server beendet haben (Hier nicht einfach nur 10 Sekunden warten, sondern auf das Beenden der Prozesse)
  4. Starten der Spigot-Server
  5. Warten, dass sich alle Spigot-Server gestartet haben
  6. Starten des BungeeCord
Okay, dann werde ich das wohl nochmal überarbeiten müssen! Aber deine Variante kann man ja eigentlich nur über ein externes Programm tätigen oder?
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Aber deine Variante kann man ja eigentlich nur über ein externes Programm tätigen oder?
Wenn du dir überlegst, dass du versuchst mehrere Prozesse kontrolliert zu beenden und dann neu zu starten, bleibt gar keine andere Möglichkeit, als dass ein externer Prozess als einziges am Laufen bleibt und den Neustart übernimmt. Ein Bash Skript sollte allerdings bereits ausreichen, wenn man weiß was man tut. Wobei ich nicht ganz sicher bin, ob Minecraft überhaupt auf SIGTERM Events korrekt reagiert. Da Java dafür überhaupt keine gescheiten Hooks bereitstellt vermute ich mal fast, dass man den Server über die Prozesssteuerung überhaupt nicht sauber beenden kann. Von daher bleibt nur über stdin oder ein eigenes Steuerplugin den Server zum beenden zu bringen.
 
Oben