Проблема часто возникает, когда Apache Tomcat не удается правильно завершить работу, даже если была отправлена инструкция по отключению. В моем случае, используя Tomcat 8, это происходит с раздражающей регулярностью. К счастью, вы можете использовать Windows PowerShell и команду netstat
, чтобы создать простой сценарий для завершения процесса.
Следующий скрипт PowerShell проанализирует вывод из netstat
, чтобы найти любой процесс, который прослушивает 127.0.0.1:8005
, извлечь его PID и затем завершить этот процесс:
netstat -a -o -n `
| select -skip 4 `
| % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}} `
| ? {$_.Fields[1] -match '127\.0\.0\.1\:8005$'} `
| % {Write-Host "Killing PID" $_.Fields[4] "..."; taskkill /F /PID $_.Fields[4] }
Если ваш server.xml
настраивает Tomcat для использования другого порта или IP, отредактируйте регулярное выражение в четвертой строке скрипта соответствующим образом.
Наконец, я должен отметить, что в Linux ситуация лучше, потому что вы можете указать Tomcat сохранить его PID в файл во время запуска и использовать переключатель для принудительного завершения работы, позже - скрипт завершения работы для систем 'nix. уже имеется возможность убить процесс, и работа с секретом netstat
не требуется.