windows下bat curl實現tomcat進程守護

來源:互聯網
上載者:User

朋友公司的 tomcat運行在windows平台下,其提到tomcat不是很穩定,老是掛,有沒有什麼好的辦法。其中給他的建議裡有一條,讓其開一個tomcat的守護進程。由於windows下不像linux(Linux平台下各種命令、各種文法、各種順手),win平台下bat感覺既弱又難理解。不過這裡還是找了下之前寫過的tomcat進程守護指令碼,改了下寫了一個。

同一個思種, 擷取某個URL的狀態代碼,對比HTTP狀態代碼是否為200,如果不是200,將該主機的某個特定tomcat進行重啟(針對單台主機上有多個tomcat的情況)。擷取狀態代碼,能過純win平台實現的方法有兩種:其一是增加curl.exe ,另一種方法是通過VBS實現 。

一、curl.exe實現

bat代碼如下:

@echo off
:loop
set "httpcode="
cd /d c:\curl
for /f "delims=" %%r in ('curl.exe -sL -w "%%{http_code}" "http://127.0.0.1:8080/" -o nul') do (
  set httpcode=%%r
)
echo %httpcode%
if not "%httpcode%"=="200 " (
taskkill /F /FI  "WINDOWTITLE eq tomcat_8080"
ping -n 3 127.0.0.1>nul
set CATALINA_HOME=C:\tomcat
set EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat
rem call "%EXECUTABLE%" start && exit
call "%EXECUTABLE%" start
) else (
echo "the tomcat run is ok!'
)
ping -n 30 127.0.0.1>nul
goto loop

這裡的等待是通過ping等待實現的,現使用sleep,也需要調用VBS指令碼實現,具體可以查看windows下的計時等待 。擷取到的httpcode變數這裡需要注意,比如擷取的值是200,其後面是有空格的,所以條件寫的時候後面的200也要有空格 ,當然也可以curl |findstr 的方式判讀是否存在200去做。

taskkill 這裡殺進程時,會匹配視窗標題,這是在一台主機啟動多個tomcat 的情況下,可以區分對待。對不同的tomat指定不同標題的方法可以參看 修改Tomcat視窗標題 。

二、VBS實現

這裡並沒有給出一個完整的功能實現的代碼,因為vbs和bat寫起來太蛋疼了,這裡只給一個範例程式碼:

'Get HttpCode
set oHttp=CreateObject("MSXML2.XMLHTTP")
oHttp.Open "GET","https://www.111cn.net/",False
oHttp.Send
If oHttp.Status = 200 Then
 MsgBox("Http Status Code is 200 OK.")
Else
 MsgBox("正常。")
End If
'WScript.Echo oHttp.Status
set oHTTP=Nothing

BAT裡如果調用vbs指令碼,也可以通過cscript 命令進行調用。

三、其他

針對多個URL,通過BAT取狀態和連線時間的,還有一段代碼非常不錯,內容如下:

@echo off
    setlocal enableextensions disabledelayedexpansion
    rem Just to test - Generate a file with URLs
    > ".\urls.txt" (
        echo http://superuser.com
        echo http://www.111cn.net
        echo http://www.baidu.com
    )
    > ".\testResults.txt" (
        for /f "useback delims=" %%u in (".\urls.txt") do (
            set "statusCode="
            echo([%%u]
            cd /d c:\curl\
            for /f "tokens=1,2 delims=#" %%a in ('
                curl -w "##%%{time_connect}##." -I -s --url "%%~u"
                ^| findstr /l /b /c:"HTTP/" /c:"##"
            ') do if "%%b"=="." (
                setlocal enabledelayedexpansion
                echo(    !statusCode! - %%a
                endlocal
            ) else (
                set "statusCode=%%a"
            )
        )
    )

雖然看起來比較精妙,但是還是比較難理解,這個是根據國外某站上的一段代碼改的。

沒有營養的內容先到這裡吧,本篇只是為了做一個對比,後續準備寫一個python實現的windows守護進程 。再通過pyexe產生exe檔案,感覺比bat好不少。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.