2022.10.14更新内容补充 curl配置、增加loop脚本、删除test.cmd的等待操作
环境依赖
curl 用来检测站点比较好用
下载Windows版本 https://curl.se/windows/
初步想法
两个脚本运行在Arcgis站点本机,检测本机的6080端口是否通,如果不通的话就:
- 关闭Arcgis Server服务
- 干掉没有关掉的ArcSOC.exe僵尸进程
- 启动Arcgis Server服务
- 过5分钟以后再进行第二次检测
总共逻辑只有这样的五步
curl环境配置
curl包下载完以后,将curl包解压到C盘根路径下,在环境变量中加入一条
C:\curl-7.84.0_9-win64-mingw\bin
这样就可以在cmd中使用curl命令了
loop.cmd 循环脚本
@echo off
:start
start C:\test.cmd
echo wait 5 mins
TIMEOUT /T 300 /NOBREAK
goto start
该脚本可以放在服务器的任意目录下
test.cmd 主脚本
@echo off
SET "URL=http://127.0.0.1:6080/arcgis/rest/"
curl -s -o nul -v --connect-timeout 10 -X POST -w "%%{http_code}" "%URL%">C:\return.txt
SET /P HTTP=<C:\return.txt
if "%HTTP%" == "200" (
echo OK
) else (
echo %HTTP%
start C:\reboot_arcsrv.cmd
)
exit
由于loop.cmd里写死test.cmd的位置,该脚本需要放置在服务器的C盘根目录下
reboot_arcsrv.cmd 重启脚本
net stop "Arcgis Server"
ping 127.0.0.1 -n 5
taskkill /F /IM ArcSOC.exe
ping 127.0.0.1 -n 5
net start "Arcgis Server"
由于test.cmd里写死reboot_arcsrv.cmd的位置,该脚本需要放置在服务器的C盘根目录下
目前仍然存在的问题
curl的超时问题是没法解决的,应该是windows下curl的一个bug
# --connect-timeout 10 设置了超时时间为10秒,但是从未生效
curl -s -o nul -v --connect-timeout 10 -X POST -w "%%{http_code}" "%URL%">C:\return.txt
如果一个请求返回时间过长照理应当结束请求,但是curl做不到,这个后续必须优化。
未来优化的展望
最近学到了Python3中requests库的用法,准备使用requests重写一下
之前在文章SRE从踩坑到牛逼(一)利用Python+CMD进行java应用的监控和重启中使用了Python官方库urllib进行连接测试,也会在新的Python脚本里面使用,对比一下requests urllib的差异,到时候会写一篇 SRE从踩坑到牛逼(二) 敬请期待