gpt4 book ai didi

windows - 检查 Web 服务器并且不从同一服务器上的配置文件解析端口 80 和端口 8080

转载 作者:可可西里 更新时间:2023-11-01 10:35:50 25 4
gpt4 key购买 nike

今天的研究结果..

REF = How to parse xml file in batch (CMD)注意:来自 jeb 的注释有助于从 xml 中解析出端口号

SET results=%CD%\somelog.log

IF EXIST %results% DEL %results%

REM NOTE: THIS IS ALL ONE LINE!!!! ALL THE WAY DOWN TO THE PAUSE STATMENT.
FOR /F "usebackq tokens=1" %%q in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services ^| find /i "tomcat"`) DO
FOR /F "usebackq tokens=3" %%a in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services\%%~nxq /v ImagePath`) DO
FOR /F "tokens=1-2,* delims=:\" %%1 IN ("%%a") DO
FOR /F tokens^=1^,2^ delims^=^" %%A IN ('..\grep -m 1 "\<Connector port\=" \\some_server\%%1$\%%2\conf\server.xml') DO
ECHO "CHECKING WEB PAGE CONTENT FROM URL http://some_server:%%B/server_page.htm" 1>> %results% &&
..\WGET -q "http://some_server:%%B/server_page.htm" -O - | ..\GREP "Configuration framework is not loaded" 2>> %results% &&
..\WGET -q "http://some_server:%%B/server_page.htm" -O - | ..\GREP "Successfully acquired a database connection" 3>> %results%

pause

当前结果: 是结果数据被重定向到日志文件,但是通过使用 GREP 的管道 WGET 的结果没有捕获到日志。

尝试过:结果 >> 日志结果 1>> 日志结果 2 2>> 日志结果 3 3>> 日志

并且只是在最终结果中捕获 ECHO 命令的结果。

起点: 2014-12-05

让我们弄清楚为什么我们没有获得服务器端口。我已经解决了这个问题,但现在我需要解决这个问题以及如何到达第一个 %serverport%。根据要求,我删除了 FINDSTR 并使用了 GREP。

具体来说:

REM >>  here is the problem: if we want to break out for the first port
SET serverport=%%B && GOTO :BREAK)
:break
SET serverport=%serverport: protocol=%
SET serverport=%serverport:"=%

并且因为我们中断了脚本,它无法继续 Apache Tomcat 的第二个实例,因为:

FOR /F "tokens=1-2* delims==" %%A IN ('..\grep "\<Connector port\=" %tpath%') DO (
SET serverport=%%B
goto :break
)
:break
SET serverport=%serverport: protocol=%
SET serverport=%serverport:"=%

所以..让我们看看这里发生了什么..

第 1 步,让我们创建一个 DEBUG 批处理脚本。这将获取 Windows 服务名称的服务器 key 。例如,当您运行 NET STOP tomcat6 或 NET START tomcat6 .. 我们不需要完整的注册表路径,而只需要键名。我们可以在尝试确定文件系统中的文件夹名称时使用相同的构造,但这是来自注册表。

echo test 1

FOR /F "usebackq tokens=1" %%q in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services ^| find /i "tomcat"`) DO echo %%~nxq

echo end of test 1

第 1 步的结果,让我们看看它做了什么。如果我们使用 tester.bat > results.txt,我们会看到:

D:\WORK\Scripts\test>echo test 1 
test 1

D:\WORK\Scripts\test>FOR /F "usebackq tokens=1" %q in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services | find /i "tomcat"`) DO echo %~nxq

D:\WORK\Scripts\test>echo tomcat6_1
tomcat6_1

D:\WORK\Scripts\test>echo tomcat6_2
tomcat6_2

D:\WORK\Scripts\test>echo end of test 1
end of test 1

第 2 步,让我们看看当我们开始寻找服务器端口时我们得到了什么。注意:每个 FOR 行都是一行.. FOR.. IN.. DO.. FOR.. IN.. DO.. FOR.. IN.. DO.. FOR.. IN.. DO...(是的, 那就是一行中的四个)

echo test 2

FOR /F "usebackq tokens=1" %%q in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services ^| find /i "tomcat"`) DO
FOR /F "usebackq tokens=3" %%a in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services\%%~nxq /v ImagePath`) DO
FOR /F "tokens=1-2,* delims=:\" %%1 IN ("%%a") DO
FOR /F "tokens=1-2* delims==" %%A IN ('..\grep "\<Connector port\=" \\some_server\%%1$\%%2\conf\server.xml') DO (SET serverport=%%B)
echo end of test 2

echo we are done

第 2 步的结果,让我们看看它做了什么。如果我们使用 tester.bat > results.txt,我们会看到:

D:\WORK\Scripts\test>echo test 2 
test 2

D:\WORK\Scripts\test>FOR /F "usebackq tokens=1" %q in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services | find /i "tomcat"`) DO FOR /F "usebackq tokens=3" %a in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services\%~nxq /v ImagePath`) DO FOR /F "tokens=1-2,* delims=:\" %1 IN ("%a") DO FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\%1$\%2\conf\server.xml') DO (SET serverport=%B )

D:\WORK\Scripts\test>FOR /F "usebackq tokens=3" %a in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services\tomcat6_1 /v ImagePath`) DO FOR /F "tokens=1-2,* delims=:\" %1 IN ("%a") DO FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\%1$\%2\conf\server.xml') DO (SET serverport=%B )

D:\WORK\Scripts\test>FOR /F "tokens=1-2,* delims=:\" %1 IN ("d:\tomcat_1\bin\tomcat6.exe") DO FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\%1$\%2\conf\server.xml') DO (SET serverport=%B )

D:\WORK\Scripts\test>FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\d$\tomcat_1\conf\server.xml') DO (SET serverport=%B )

D:\WORK\Scripts\test>(SET serverport="80" protocol )

D:\WORK\Scripts\test>(SET serverport="8443" protocol )

D:\WORK\Scripts\test>(SET serverport="8009" protocol )

D:\WORK\Scripts\test>FOR /F "usebackq tokens=3" %a in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services\tomcat6_2 /v ImagePath`) DO FOR /F "tokens=1-2,* delims=:\" %1 IN ("%a") DO FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\%1$\%2\conf\server.xml') DO (SET serverport=%B )

D:\WORK\Scripts\test>FOR /F "tokens=1-2,* delims=:\" %1 IN ("d:\tomcat_2\bin\tomcat6.exe") DO FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\%1$\%2\conf\server.xml') DO (SET serverport=%B )

D:\WORK\Scripts\test>FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\d$\tomcat_2\conf\server.xml') DO (SET serverport=%B )

D:\WORK\Scripts\test>(SET serverport="8080" protocol )

D:\WORK\Scripts\test>(SET serverport="8443" protocol )

D:\WORK\Scripts\test>(SET serverport="8010" protocol )

D:\WORK\Scripts\test>echo end of test 2
end of test 2

D:\WORK\Scripts\test>echo we are done
we are done

我只想要服务器端口的第一个实例。

此服务器有两个 tomcat 实例:端口 808080端口

如果只有这台服务器会很简单,但我有 30 台服务器要报告。

最佳答案

好的。我很确定我可以为此创建一个答案。使用四次嵌套的 FOR..IN..DO 结构,我认为这就是我无法运行 WGET 并且只有第一个 ECHO 起作用的原因。这就是我们使用这段代码的原因。

REF How to parse xml file in batch (CMD)注意:来自@jeb 的注释有助于从 xml 中解析出端口号

SET servers=%CD%\monitored_computers.txt
SET results=%CD%\somelog.log

IF EXIST %results% DEL %results%

FOR /f "tokens=2-8 delims=.:/ " %%a IN ("%date% %time: =0%") DO ECHO PROCESS CHECK STARTED %%a/%%b/%%c %%d:%%e:%%f.%%g >> %results%
FOR /F "tokens=1-2* delims=," %%A IN (%servers%) DO (
REM NOTE: THIS IS ALL ONE LINE!!!! ALL THE WAY DOWN TO THE PAUSE STATMENT.
FOR /F "usebackq tokens=1" %%q in (`reg query \\%%A\HKLM\SYSTEM\CurrentControlSet\services ^| find /i "tomcat"`) DO
FOR /F "usebackq tokens=3" %%a in (`reg query \\%%A\HKLM\SYSTEM\CurrentControlSet\services\%%~nxq /v ImagePath`) DO
FOR /F "tokens=1-2,* delims=:\" %%1 IN ("%%a") DO
FOR /F tokens^=1^,2^ delims^=^" %%H IN ('..\grep -m 1 "\<Connector port\=" \\%%A\%%1$\%%2\conf\server.xml') DO
ECHO "http://%%A:%%I/some_page.htm" >> %CD%\servers.txt
pause
)

希望这对某人有帮助。

关于windows - 检查 Web 服务器并且不从同一服务器上的配置文件解析端口 80 和端口 8080,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27305794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com