Como forçar o tomcat a desligar após um número x de segundos no Windows?

2

Em sistemas Linux, o comando stop em catalina.sh aceita um parâmetro de timeout que mata o tomcat após o número de segundos fornecido. O catalina.bat, no entanto, não parece ter um parâmetro como esse. Estamos enfrentando problemas com o fato de nosso tomcat (executado como um serviço do Windows) ser rejeitado quando um net stop tomcat é emitido. Qual seria a melhor maneira de implementar esse comportamento em uma caixa do Windows? Já vi postagens sobre o uso do taskkill , mas como é melhor descobrir que o processo ainda está em execução no meu script (powershell).

    
por Erik B 16.10.2013 / 11:58

2 respostas

3

Este exemplo supõe que o nome do serviço e o nome do processo são 'tomcat'.

# Ask service, nicely, to stop
Stop-Service -Name 'tomcat'

# Give service a bit to tidy up.
Start-Sleep -Seconds 30

# If the service isn't stopped yet, end the process forcefully.
if ( (Get-Service -Name 'tomcat').Status -ne 'Stopped' ) {
     Stop-Process -ProcessName 'tomcat' -Force
}
    
por 17.10.2013 / 19:03
3

O Tomcat sendo executado como um serviço do Windows é controlado pelo gerenciador de serviços do Windows.

Quando você faz um net stop, eu acho que o comando stop é enviado para o tomcat, mas ele simplesmente precisa de mais tempo para parar completamente. Por exemplo. se você fizer uma parada na rede e esperar o tempo suficiente, o tomcat será encerrado. (FWIW, eu gerencio um tomcat no servidor windows eu mesmo, então isso não é feito, mas é baseado na experiência real, ao longo de vários anos.)

Você pode usar o taskkill, isso terminará imediatamente. Você pode usar o nome do processo. Se o código ainda estiver sendo executado no tomcat (gravar em um banco de dados ou algo semelhante), isso pode ser confuso.

A melhor abordagem, normalmente, é fazer uma parada líquida e esperar que ela realmente saia, ou pedir ao desenvolvedor do aplicativo que faça o desligamento funcionar corretamente (por exemplo, para que o aplicativo responda mais rapidamente à solicitação de parada; desliga prontamente).

Se isso não acontecer, a tarefa estará ok se você não estiver preocupado sobre qual será o efeito da rescisão.

    
por 17.10.2013 / 05:15