Reinicita automaticamente a aplicação quando fecha

10

Eu tenho um aplicativo de servidor que quero estar em execução sempre que o computador estiver em execução e, geralmente, esse é o caso, exceto que, às vezes, acho que ele fechou sozinho.

Existe um bat ou script que eu possa rodar para monitorar o aplicativo e reiniciá-lo, caso ele seja fechado?

    
por Sid 06.08.2011 / 16:44

5 respostas

9

Isso nem sempre funciona (depende de como o programa é carregado), mas normalmente você pode criar um arquivo em lote como este:

@Echo off
:Start
NotePad
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

goto Start

Eu usei o bloco de notas como um exemplo.

As linhas

echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

são apenas um atraso (de 10 segundos) para dar ao usuário a chance de interromper o processo antes que ele seja iniciado novamente.

A linha

echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 

não é necessário, mas registra toda vez que o programa é fechado em um arquivo, então pode ser útil diagnosticar o problema. O ErrorLevel pode não dizer muito, mas um programa deve retornar 0 se ele for fechado normalmente, e uma mensagem diferente de zero se não for

Note que você menciona que seu programa não faz nada se já estiver rodando. Isso geralmente significa que o aplicativo é iniciado, detecta que outra cópia já está em execução e é encerrada imediatamente. Se esse for o caso, e seu programa estiver em execução antes de iniciar esse arquivo em lote, o lote fará um loop e tentará iniciar seu programa a cada dez segundos.

    
por 06.08.2011 / 18:29
2

Com base nas suas respostas acima, sugiro que você coloque esse comando em um arquivo de lote e defina esse arquivo de lote para ser executado como uma tarefa agendada a cada minuto. Não há praticamente nenhuma sobrecarga associada a isso e garante que seu processo seja declarado, independentemente de você estar por perto para perceber que parou.

    
por 06.08.2011 / 17:45
2

Eu acho que a resposta correta para essa questão depende de por que você quer fazer isso. Você está tentando resolver o desligamento acidental? Impedir o desligamento casualmente "malicioso" por usuários da máquina (por exemplo, funcionários fechando o software de monitoramento)? Impedir ataques maliciosos sérios e qualificados? Você está tentando escrever malware (nesse caso, por favor, sod off; -))

Além disso, como outros comentaristas mencionaram, seria diferente se você tivesse escrito um serviço do Windows (por exemplo)

Pessoalmente, provavelmente começaria escrevendo um segundo aplicativo e iniciando da mesma maneira. Peça que os dois aplicativos digitalizem uns aos outros periodicamente e reiniciem se necessário - certifique-se de fornecer uma maneira fácil de fechar legitimamente o aplicativo!

Dito isto, e dado o seu comentário "às vezes eu acho que ele fechou por si só", eu realmente começaria tentando descobrir por que ele está fechado ...

    
por 06.08.2011 / 17:54
1

Você pode usar um programa chamado ReStartMe 2.0 que faz exatamente isso:

Monitora os processos e os reinicia quando eles são fechados.

    
por 05.05.2013 / 18:30
-1

isso é muito melhor! este é um código que eu tenho usado para um servidor de jogo mais minado deve ser salvo em um arquivo .bat

@echo off
rem This is a comment line
rem This one is a comment too
rem Following line ensures the working directory is searched in C:
C:
rem Join the correct directory, where the server stuff lies in:
cd "C:\Users\morenavaj\Documents\minetest-0.4.16-win64 - Lone_Wolf\"
:love_spaghetti_code
bin\server.lnk --config minetest.conf ^
            --worldname "Land of Blockheads" ^
            --gameid minetest_game ^
            --port 30000 ^
            --logfile bin/debug.txt

echo Restarting server....
goto love_spaghetti_code

echo Done (this should never, ever, happen)
    
por 23.09.2017 / 17:37