Probleme bei der Batch-Dateiautomatisierung

643
Fire Dragon

Ich möchte also eine Batch-Datei für meinen Minecraft Server erstellen, um den Server am Ende eines jeden Tages zu starten und neu zu starten (vorzugsweise um Mitternacht, aber 24 Stunden funktionieren auch).

Dies ist mein Startbatch, bei dem andere Batchdateien aufgerufen werden, um die Server einzeln zu öffnen und zu starten:

start cmd /k call BungeeStartup.bat start cmd /k call HUBStartup.bat start cmd /k call PvEStartup.bat start cmd /k call PvPStartup.bat start cmd /k call MinigamesStartup.bat start cmd /k call TownyStartup.bat start cmd /k call SecQStartup.bat 

Und jedes "Startup.bat" ruft den Server wie folgt auf:

D: cd Minecraft 1.12 Server Files cd BungeeCord <-- and each it's respective server, of course, so I don't have to type it all out again RUNGEE.bat 

Und schließlich sehen die RUN.bat-Dateien folgendermaßen aus:

java -jar -Xmx350M spigot-1.12.2.jar -o true 

Und das startet alle meine Server in verschiedenen Eingabeaufforderungen. Aber das Problem ist, dass es keine Möglichkeit gibt (die ich kenne), mit der ich die Server beenden kann, ohne dass ich manuell in jeden Eingabeaufforderungsserver / stop eingeben und dann die Eingabeaufforderung erneut beenden muss, um sie zu beenden. Dann habe ich die Batch-Datei auch manuell erneut ausgeführt.

Meine Fragen sind also:

  • Wie beende ich (mit den Batchdateien) jeden Server und dann jedes Eingabeaufforderungsfenster, ohne es manuell auszuführen?
  • Wie starte ich sie nach dem Beenden automatisch neu?
  • UND wie man dies speziell alle 24 Stunden erreicht (oder vorzugsweise um Mitternacht jede Nacht)

BEARBEITEN:

Um zu verdeutlichen, wie der Minecraft-Server funktioniert, füge ich diese Bearbeitung hinzu.

Wenn Sie einen Server starten, läuft er offensichtlich auf dem Server und alles und die Leute können sich verbinden und spielen. Es hat eine Eingabeaufforderung, die Sie verwenden, um Befehle auszuführen und Informationen und all das anzuzeigen. Um den Server ordnungsgemäß herunterzufahren, wo er alles speichert und die Dateien nicht beschädigt, geben Sie "stop" in die Eingabeaufforderung ein. Dann wird es aus dem Server beendet und normalerweise würde die Eingabeaufforderung beendet, damit Sie es wie gewünscht erneut öffnen können. Bei den Batch-Dateien, die ich eingerichtet habe, wird die Eingabeaufforderung nicht einfach nach Eingabe von "stop" beendet. Sie kehren in das Verzeichnis zurück, in dem Sie die Eingabeaufforderung so verwenden können, als würde der Server nicht mehr ausgeführt (weil Es ist nicht) und Sie müssen "exit" eingeben, um die Eingabeaufforderung zu schließen.

1

1 Antwort auf die Frage

0
Pimp Juice IT

MineCraft Game App Automatisierung stoppen und neu starten - Windows

Ich habe eine zweiteilige Batch-Script-Lösung eingefügt. Für den ersten Teil muss ein Titel festgelegt werden, der der Zeichenfolge des App-Namens entspricht, sodass die ausgeführten App-Befehle diese Metadaten enthalten. Der zweite Teil verwendet eine Kombination aus appactivate, um die Befehlsfenster mit den Namen der App-Namen zu aktivieren, und sendkeys, um die Tastaturanschläge zu emulieren, um die Apps zu schließen und neu zu starten.


1. Batch-Skript (Titel setzen)

Hinweis: Sie fügen einfach eine neue Zeile title "<appname>"in demselben Batch-Skript hinzu, das Sie derzeit verwenden, jedoch in der Zeile über den ausgeführten java -jar ~Befehlen. Sie müssen natürlich den <appname>Wert durch den Namen der App ersetzen, die Sie zum Stoppen benötigen, usw.

title "BungeeCord" java -jar -Xmx350M spigot-1.12.2.jar -o true 

2. Batch Script (App stoppen und neu starten)

Hinweise: Sie möchten den AppName=Wert auf den gleichen Wert und Fall festlegen, den Sie für jedes Skript verwenden, in dem Sie den Wert festlegen title. Der StopApp=Wert sollte auf den Wert eingestellt werden, die Sie verwenden, die in typisiert ist die korrelierte App zu stoppen zB end, stopusw.

@ECHO OFF  SET AppName=BungeeCord SET StopApp=end SET StopPauseSec=5 SET StartPauseSec=10  SET TempVBSFile=%temp%\~tmpSendKeysTemp.vbs IF EXIST "%TempVBSFile%" DEL /F /Q "%TempVBSFile%"  ECHO Set WshShell = WScript.CreateObject("WScript.Shell") >>"%TempVBSFile%" ECHO Wscript.Sleep 900 >>"%TempVBSFile%" ECHO WshShell.AppActivate "%AppName%" >>"%TempVBSFile%" ECHO Wscript.Sleep 900 >>"%TempVBSFile%" ECHO WshShell.SendKeys "%StopApp%" >>"%TempVBSFile%" ECHO Wscript.Sleep 500 >>"%TempVBSFile%" ECHO WshShell.SendKeys "" >>"%TempVBSFile%" ECHO Wscript.Sleep %StopPauseSec%000 >>"%TempVBSFile%" ECHO WshShell.SendKeys "%%" >>"%TempVBSFile%" CSCRIPT //nologo "%TempVBSFile%"  timeout /t %StartPauseSec% start "" "cmd /k call BungeeStartup.bat" EXIT /B 

Terminplanung

Sie können mit Taskplaner eine neue Aufgabe zu erstellen. Geben Sie auf der Registerkarte Allgemein einen gültigen Namen an, und überprüfen Sie die Optionen Nur ausführen, wenn der Benutzer angemeldet ist, und Ausführen mit den höchsten Berechtigungen .

Von der Trigger Registerkarte Neue Optionen einen neuen Trigger zu erstellen. Dann sollten Sie Begin this tasksich Feld auf Nach einem Zeitplan und die SettingsOptionen werden nach Einmalig mit den StartFeldwerten ist das das Datum in der Nacht klar sein wird, wo Sie jetzt sind (zB 7/12/2018) und der Zeitwert als eingestellt ist 00.00: 00 AM, um sicherzustellen, dass es zu dieser bestimmten Zeit ausgeführt wird. Nun unten im Advanced settingsAbschnitt, möchten Sie das, um sicherzustellen, Repeat task everybei einer ist 24 Stunden - Wert (geben Sie es manuell in falls erforderlich) und das for a duration ofist mit einem Set auf unbestimmte Zeit Wert und dies stellt sicher, es jeden Abend um 12 Uhr gekickt wird .

Von der Aktionen Registerkarte, wählen Sie die neue Option, um eine neue Aktion zu erstellen. Vergewissern Sie sich dann im Fenster " Neue Aktion", dass das ActionFeld auf Start eines Programms gesetzt ist und dass das Program/scriptFeld den vollständigen Pfad zu dem Skript hat, das Sie ausführen müssen, und dass das Start inFeld nur den Ordnerpfad enthält, in dem das Skript ausgeführt wird. Drücken Sie OK und OK wieder und alles sollte jetzt automatisiert werden.


Weitere Ressourcen

@FireDragon Okay, für die Zeile `timeout / t% StartPauseSec%` können Sie `:: timeout / t% StartPauseSec%` auskommentieren und dann ohne Kommentar ausführen, um zu sehen, ob es ohne das funktioniert oder nicht. Wenn es funktioniert, können Sie auch die Zeile `:: SET StartPauseSec = 10` entfernen oder auskommentieren. Ich konnte diese Prozesse nicht vollständig auf meiner Seite testen, aber eine kurze Wartezeit für bestimmte Dinge schadet nie und normalerweise hilft ich immer bei den Dingen, die ich mit dieser Art von Lösungen automatisiere, aber ich habe keinen Mine Craft-Server auf meiner Seite vollständig testen. Pimp Juice IT vor 6 Jahren 0
Was ich tun könnte, ist, dass jedes Ereignis geplant wird, nachdem das andere angeblich abgeschlossen ist, aber ich muss es lieber nicht so machen Fire Dragon vor 6 Jahren 0
In Ordnung, gut, mit diesem Test schließt es BungeeCord, schließt den HUB und öffnet den HUB erneut, schließt ihn, öffnet ein neues PvE, ohne das bereits vorhandene zu schließen, schließt es und macht das gleiche für alle anderen Server, die mit SecQ enden, sich aber nicht schließen lassen. Fire Dragon vor 6 Jahren 0
Also habe ich ein Video gemacht, was genau passiert, und es zeigt auch die Setup- und Batch-Dateicodes, die ich habe und so. Wie kann ich es mit Ihnen teilen? Fire Dragon vor 6 Jahren 0
Es ist auch ein Bildschirm, nur damit Sie es wissen Fire Dragon vor 6 Jahren 0
OK Cool. [Hier ist das Video] (https://vimeo.com/279926376) Nach dem Starten der Master Kill.bat-Datei klicke ich auf nichts, bis Sie sehen, wo ich versehentlich die Windows-Taste drücke. Fire Dragon vor 6 Jahren 0
@FireDragon Aber mach dir keine Sorgen über weitere Videos, aber teste das hier, über das ich oben gesprochen habe: https://pastebin.com/V8XYvTSE Pimp Juice IT vor 6 Jahren 0
OK. Vorher hatte ich die 10 Sekunden drin und es war das Gleiche. Ich nahm es einfach heraus, damit ich sehen konnte, was schneller vor sich ging Fire Dragon vor 6 Jahren 0
Ich habe es gerade getestet, es tut das Gleiche. Beachten Sie jedoch: In Ihrem Code ist in Zeile 25 vor StopApp und nach dem Angebot ein Leerzeichen enthalten, da der Stoppvorgang nicht funktioniert, da er in die Konsole eingegeben wird. Aber ja, es beendet BungeeCord, beendet die Konsole, startet BungeeCord erneut, schreibt dann Stop in BungeeCord und konzentriert sich danach auf HUB Fire Dragon vor 6 Jahren 0
Ich denke, es würde besser funktionieren, wenn es zuerst alle beenden und dann versuchen würde, sie danach neu zu starten. Fire Dragon vor 6 Jahren 0
@FireDragon Ich musste weggehen, um jemandem dort für ein paar Minuten mit etwas zu helfen .... Hier ist die neue Skriptlogik, um zu testen, wie es funktioniert. Neugierig auf die Ergebnisse https://pastebin.com/xj5Pak6L Pimp Juice IT vor 6 Jahren 0
Okay, es funktioniert perfekt für BungeeCord, HUB und PvE. Dann springt es zu SecQ, "geht" ein, gibt dann "Stopp" ein, ohne einzutreten, geht dann zu PvP und macht dasselbe und wird von da aus seltsam, macht aber im Grunde dasselbe Zeug. Es werden jedoch weiterhin alle Server erneut gestartet. Es ist nur so, dass einige von ihnen nicht geschlossen wurden, so dass es immer noch nicht richtig funktionierte Fire Dragon vor 6 Jahren 0
Am Ende werden BungeeCord, HUB und PvE beendet und der Neustart wird einwandfrei ausgeführt. Dann war SecQ nichts anderes passiert, außer enter wurde einmal gedrückt, PvP hat gedrückt gedrückt und dann 'stop' geschrieben, aber enter wurde nicht erneut gedrückt, und Minigames hat dasselbe, außer 'stopstop' ist das, was ich eingegeben habe geh jetzt zur Arbeit, damit ich eine Weile nicht antworten kann Fire Dragon vor 6 Jahren 0
Oh und Towny hat gut funktioniert, ich denke (zitiere mich nicht dazu) muss gehen Fire Dragon vor 6 Jahren 0