Problemas de automação de arquivos em lote

1

Então, eu quero criar um arquivo de lote para o meu Minecraft Server para iniciar e reiniciar o servidor no final de cada dia (meia-noite, de preferência, mas o período de 24 horas também funciona)

Este é o meu lote de inicialização, que chama outros arquivos em lote para abrir e iniciar os servidores individualmente:

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

E cada "Startup.bat" chama para executar o servidor assim:

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

E, finalmente, os arquivos RUN.bat são assim:

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

E isso inicia todos os meus servidores em diferentes prompts de comando. Mas a questão é, não há nenhuma maneira (que eu saiba) com isso para terminar os servidores sem me digitar / parar manualmente em cada servidor de prompt de comando e, em seguida, 'sair' em cada prompt de comando novamente para sair dele. Então eu re-executei o arquivo de lote manualmente também.

Então, minhas perguntas são:

  • Como eu (com os arquivos em lote) termino cada servidor e, em seguida, cada janela do prompt de comando, sem fazê-lo manualmente
  • Como faço para reiniciá-los automaticamente depois que eles saíram.
  • E como fazer isso acontecer uma vez a cada 24 horas (ou, de preferência, à meia noite todas as noites)

EDITAR:

Então, para esclarecer como o servidor do Minecraft funciona, estou adicionando essa edição.

Quando você inicializa um servidor, obviamente ele executa o servidor e tudo e as pessoas podem se conectar e jogar. Tem um prompt de comando que você usa para executar comandos e ver informações e tudo isso. A fim de desligar corretamente o servidor para onde ele salva tudo e não corromper arquivos, digite 'stop' no prompt de comando. Em seguida, ele sai do servidor e normalmente sairia do prompt de comando para que você reabriesse como quiser. Então, com os arquivos de lote que eu configurei, ele não apenas sai do prompt de comando depois de digitar 'stop', ele retorna ao diretório para você continuar usando o prompt de comando como se não estivesse mais executando o servidor (porque não é), e você tem que digitar 'exit' para fechar o prompt de comando.

    
por Fire Dragon 11.07.2018 / 20:54

1 resposta

0

Parada do aplicativo MineCraft e automação de reinicialização - Windows

Eu incluí uma solução de script em lote de duas partes. A primeira parte exigirá a configuração de um título que corresponda à string do nome do aplicativo para que os comandos do aplicativo em execução contenham esses metadados. A segunda parte usará uma combinação de appactivate para ativar as janelas de comando com os títulos de nome do aplicativo e sendes para emular os toques de teclado para fechar e reiniciar os aplicativos.

1. Script em lote (definir título)

Observação: basta adicionar uma nova linha de title "<appname>" no mesmo script em lote que você usa atualmente, mas na linha acima dos comandos java -jar ~ executados. Você obviamente precisará substituir o valor <appname> para ser o nome do aplicativo que precisa parar, etc.

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

2. Script em lote (pare o aplicativo e reinicie-o)

Notas: Você desejará definir o valor AppName= como o mesmo valor e caso que você usa para cada script no qual você define o title . O valor de StopApp= deve ser definido com o valor usado para digitar o aplicativo correlacionado , por exemplo. end , stop , etc.

@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 "{ENTER}"                          >>"%TempVBSFile%"
ECHO Wscript.Sleep %StopPauseSec%000                      >>"%TempVBSFile%"
ECHO WshShell.SendKeys "%%{F4}"                           >>"%TempVBSFile%"
CSCRIPT //nologo "%TempVBSFile%"

timeout /t %StartPauseSec%
start "" "cmd /k call BungeeStartup.bat"
EXIT /B

Agendamento

Você pode usar o Agendador de Tarefas para criar uma nova tarefa. Na guia Geral , atribua um nome aplicável ao trabalho e depois verifique tanto o Executar somente quando o usuário estiver conectado e Executar com privilégios mais altos opções strongs>.

NaguiaAcionadores,selecioneasopçõesNovoparacriarumnovoacionador.Emseguida,certifique-sedequeBeginthistaskfieldestejadefinidocomoEmumagendamentoeasopçõesSettingsestejamdefinidascomoUmavezcomosvaloresdocampoStartcomoadataemqueSeráàmeia-noiteondevocêestáagora(porexemplo,7/12/2018)eovalordetempodefinidocomo12:00:00AMparagarantirqueelesejaexecutadonessehorárioespecífico.Agora,naseçãoAdvancedsettings,vocêdesejagarantirqueRepeattaskeveryestejaemumvalor24horas(digite-omanualmentesenecessário)eoforadurationofestádefinidocomoindefinidamentevaloreissoirágarantirqueeleéexpulsotodasasnoitesàs12dameia-noite.

NaguiaAções,selecioneaopçãoNovoparacriarumanovaação.Emseguida,najanelaNovaação,verifiqueseocampoActionestádefinidocomoIniciarumprogramaeocampoProgram/scripttemocaminhocompletoparaoscriptquevocêprecisaexecutareocampoStartintemocaminhodapasta,apenasoqualresideoscriptqueseráexecutado.PressioneOKeOKnovamenteetudodeveserautomatizadoagora.

Maisrecursos

por 11.07.2018 / 23:30