Tout simplement, comment déterminer si Tomcat s'exécute sous Windows, en utilisant l'invite de commande?
J'écris un script batch qui doit le faire. Ceci est la Bash version:
RESULT=`netstat -na | grep $2 | awk '{print $7}' | wc -l`
Où $ 2 est le port.
Je cherche quelque chose de semblable à cela. L'utilisation de Cygwin est hors de question, ce script doit nécessairement pouvoir être exécuté sur des machines uniquement équipées de Tomcat.
Vous pouvez utiliser tasklist pour vérifier si l'exécutable de Tomcat est en cours d'exécution. Par exemple:
@echo off
tasklist /FI "IMAGENAME eq Tomcat.exe" | find /C /I ".exe" > NUL
if %errorlevel%==0 goto :running
echo Tomcat is not running
goto :eof
:running
echo Tomcat is running
:eof
Il est également possible de vérifier un serveur de suppression à l'aide des options /S
, /U
et /P
. Voir tasklist /?
pour plus de détails.
Testez le statut du service Tomcat avec la commande SC . MJB a déjà suggéré de tester l'état du service avec SC, encore un autre script de traitement par lots (sans boucle FOR) pour tester l'état:
@ECHO OFF
SC query Tomcat5 | FIND "STATE" | FIND "RUNNING" > NUL
IF ERRORLEVEL 1 (
ECHO Stopped
) ELSE (
ECHO Running
)
Si vous n'êtes pas sûr si le nom du service est Tomcat5, vous pouvez répertorier tous les noms de services avec
SC query state= all | FIND "SERVICE_NAME"
Utiliser WMIC
@echo off
wmic process list brief | find /i "Tomcat.exe"
set result=%ERRORLEVEL%
if "%result%"=="1" echo "not running"
if "%result%"=="0" echo "running"
remarque:/i doit rendre l'opération de recherche insensible à la casse.
Voici la version Windows de la solution UNIX/LINUX basée sur netstat posée dans la question:
@echo off
netstat -na | find "LISTENING" | find /C /I ":8080" > NUL
if %errorlevel%==0 goto :running
echo Tomcat is not running
goto :eof
:running
echo Tomcat is running
:eof
utilisez netstat -a dans l'invite de commande.
Vous trouverez le port 8080 répertorié ici.
Eh bien, je ne suis pas très bon avec les scripts, mais vous pourriez peut-être vous en servir comme point de départ:
netstat -a -n | findstr: 8005
Obtenir si quelqu'un écoute sur le port 8005. Il s'agit du port par défaut de Tomcat pour l'administration à distance, c'est-à-dire le démarrage ou l'arrêt.
Vous pouvez également utiliser le port que le serveur http écoute.
J'espère que cela t'aides
Si vous exécutez Tomcat pour Windows et non comme un service et que vous ne voulez pas exploiter JMX, la meilleure solution est
for /F %%I in ('tasklist /FI "WINDOWTITLE eq Tomcat" /NH') do if %%I==Java.exe goto alreadyRun
où:
Je vérifie en appelant un script vb en ligne de commande
cscript //nologo checkurl.vbs | findstr "200"
IF errorlevel 1 GOTO :not_running
Enregistrez le script ci-dessous sous le nom checkurl.vbs et remplacez l'ip par ip machines
' Create an HTTP object
myURL = "http://10.1.1.1:8080/"
Set objHTTP = CreateObject( "WinHttp.WinHttpRequest.5.1" )
' Download the specified URL
objHTTP.Open "GET", myURL, False
On Error Resume Next
objHTTP.Send
intStatus = objHTTP.Status
If intStatus = 200 Then
WScript.Echo intStatus
Else
WScript.Echo "Error Connecting"
End If
J'avais des problèmes avec la commande sc query
, car même si Tomcat plantait, le service était toujours affiché comme étant en cours d'exécution alors que le port n'était pas accessible
Encore une autre option, puisque cela fonctionne probablement en tant que service
FOR /F "tokens=4 delims= " %%A IN ('SC QUERY Tomcat5 ^| FIND "STATE"') DO SET status=%%A
echo "%status%"
statut peut être des choses comme STOPPED, RUNNING ...