天天看點

Vbs腳本定時判斷及啟動tomcat服務

說到tomcat服務,我們大家都會聯系到apache,那apache和tomcat有什麼差別呢,apache是web伺服器(靜态解析,如HTML),tomcat是java應用伺服器(動态解析,如JSP、PHP)tomcat隻是一個servlet(jsp也翻譯成servlet)容器,可以認為是apache的擴充,但是可以獨立于apache運作,兩者從以下幾點可以比較的: 1、兩者都是apache組織開發的 。2、兩者都有HTTP服務的功能 。3、兩者都是開源免費的 。當然對于一個java開發人員來是說tomcat服務應用的比較多了,為什麼這沒說呢,因為對于一個java開發人員來說日常應用的開發工具比如eclipse或者idea開發工具都會內建tomcat服務來進行相關代碼測試。好了廢話不多說了,今天呢主要借此分享一下我在運維工作中遇到的一個問題。

我們公司的首頁是通過java開發的,然後到處.war包運作在tomcat服務下,我們公司的tomcat服務是運作在windows上,其實tomcat服務運作在windows和linux下完全一樣,主要取決于個人愛好問題,當然也有人能說運作在linux下比較穩定,我也不排除這樣的說法哦,之前公司的開發人員就部署到了windows上是以就以此來運維了。因為公司的很多服務都是嵌套的,這也許是 開發的架構問題,是以近期問題有很多,導緻tomcat服務不穩定,無緣無故自動停止的問題,為了解決這個問題,我通過vbs服務進行tomcat服務的處理,定期執行腳本判斷程序中是否有tomcat服務的程序(java)來保證tomcat服務運作正常。

對于在windows上的tomcat安裝及部署就不多介紹了,在之前的文章中有詳細介紹,我們下載下傳apache for tomcat解壓後然後進入tomcat解壓目錄下的bin目錄下運作startup.sh檔案就可以啟動tomcat服務了,為了更好的保證tomcat服務的運作,有很多人講tomcat服務設定為一個windows服務進行運作的, 那怎麼做呢,具體見下:

比如我的tomcat解壓安裝目錄問c:\apache-tomcat8.0.0,通過運作指令提示符---win+r---cmd---Cd c:\apache-tomcat8.0.9\bin 通過cd的方式進入apache-tomcat安裝路徑下的bin目錄,然後執行

1

<code>Service.bat </code><code>install</code>

指令,講會設定tomcat服務作為一個windows服務運作過,同樣我們也可以使用Service.bat remove指令取消tomcat作為一個windows服務。

<a href="http://s3.51cto.com/wyfs02/M00/6F/4C/wKioL1WX-6nRNujjAAFmmBTVX9E840.jpg" target="_blank"></a>

然後我們通過運作services.msc打開服務管理,就看見tomcat設定為了一個windows服務

<a href="http://s3.51cto.com/wyfs02/M01/6F/4C/wKioL1WX-6nRCMvGAAEgqZYyi4w718.jpg" target="_blank"></a>

我們可以通過運作以下指令删除tomcat作為一個windows服務

<code>service.bat remove</code>

<a href="http://s3.51cto.com/wyfs02/M01/6F/4E/wKiom1WX-eDwHqQvAAGeL1Wt2KE426.jpg" target="_blank"></a>

對于設定windows服務我就不多說了,主要說說,通過vbs腳本如何判斷程序中是否運作一個服務,如果沒有那就啟動(1分鐘判斷一次),腳本示例如下:作為一個windows服務進行判斷。注:在此我們可以設定任何服務進行判斷的

2

3

4

5

6

7

8

9

10

11

12

<code>Dim WshShell, ProgramPath</code>

<code>ProgramPath=</code><code>""</code><code>"C:\apache-tomcat-8.0.9\bin\startup.bat"</code><code>""</code>

<code>Set WshShell=WScript.CreateObject(</code><code>"WScript.Shell"</code><code>)</code>

<code>Do</code>

<code>Set wmiService = GetObject(</code><code>"winmgmts:\\.\root\cimv2"</code><code>)</code>

<code>Set wmiObjects = wmiService.ExecQuery(</code><code>"SELECT * FROM Win32_process where name='java.exe'"</code><code>)</code>

<code>if</code> <code>wmiObjects.count &gt; 0 Then</code>

<code>WScript.</code><code>sleep</code> <code>1000*60*1</code>

<code>Elseif wmiObjects.count = 0 Then</code>

<code>WshShell.Run ProgramPath,2</code>

<code>End If</code>

<code>Loop</code>

如果tomcat服務不是一個windows服務的話,我們需要通過cmd進行調用啟動,是以腳本見下:

運作啟動startup.bat,啟動後程序中有java.exe

<code>Dim WshShell, ProgramPath </code>

<code>ProgramPath=</code><code>"C:\apache-tomcat-8.0.9\bin\startup.bat"</code>

<code>Set WshShell=WScript.CreateObject(</code><code>"WScript.Shell"</code><code>) </code>

<code>WshShell.CurrentDirectory="C:\apache-tomcat-8.0.9\bin\"</code>

<code>Set fso=CreateObject(</code><code>"scripting.filesystemobject"</code><code>)</code>

<code>If fso.fileExists(ProgramPath) Then </code>

<code>'MsgBox </code><code>"1"</code>

<code>WshShell.Run </code><code>"cmd.exe /c "</code><code>&amp; Chr(34) &amp; ProgramPath &amp; Chr(34) &amp;</code><code>" &amp; pause "</code>

<code>Else </code>

<code>'MsgBox </code><code>"2"</code>

我們以上代碼發現,運作後多出現一個指令提示符進行确認的,因為我們需要使用windows的計劃任務進行處理判斷,是以就不需要添加時間進行代碼判斷了,是以腳本再次優化:(建議使用該腳本)

<code>WshShell.Run </code><code>"cmd.exe /c "</code><code>&amp; Chr(34) &amp; ProgramPath &amp; Chr(34)</code>

如果需要通過時間進行判斷需要更新代碼,比如10分鐘判斷一次,然後運作程式腳本如下:

13

14

<code>ProgramParentPath="C:\apache-tomcat-8.0.9\bin\"</code>

<code>ProgramPath=ProgramParentPath &amp; </code><code>"startup.bat"</code>

<code>WshShell.CurrentDirectory=ProgramParentPath</code>

<code>Set wmiObjects = wmiService.ExecQuery(</code><code>"SELECT * FROM Win32_process where name='java.exe'"</code><code>)        </code>

<code>If wmiObjects.count = 0 Then</code>

<code>WshShell.Run </code><code>"cmd.exe /c "</code><code>&amp; Chr(34) &amp; ProgramPath &amp; Chr(34) &amp;</code><code>""</code><code>,0</code>

<code>WScript.Quit </code>

<code>WScript.Sleep 60*1000*1</code>

然後我們可以通過系統的計劃任務來定時執行即可

注:建立計劃任務的時候,建議以本地使用者登陸并且建立

開始運作Taskschd.msc

建立任務計劃

<a href="http://s3.51cto.com/wyfs02/M02/6F/4E/wKiom1WX-eDR98w2AADNjjbDDlc573.jpg" target="_blank"></a>

設定計劃任務名稱及運作所有者,在此我們使用本地administrator及設定不管使用者是否登陸都要運作

<a href="http://s3.51cto.com/wyfs02/M00/6F/4E/wKiom1WX-eCzVh21AAFW59kmt0A637.jpg" target="_blank"></a>

添加觸發器,運作時間的設定

<a href="http://s3.51cto.com/wyfs02/M01/6F/4E/wKiom1WX-eCyUDVsAAERPPybIw4355.jpg" target="_blank"></a>

添加操作,選則執行腳本

<a href="http://s3.51cto.com/wyfs02/M02/6F/4E/wKiom1WX-eCzAtMtAAD3n3BwbtU045.jpg" target="_blank"></a>

添加設定

<a href="http://s3.51cto.com/wyfs02/M00/6F/4E/wKiom1WX-eDiu_50AAE56i6rPBA716.jpg" target="_blank"></a>

運作完成

<a href="http://s3.51cto.com/wyfs02/M01/6F/4E/wKiom1WX-eHjRW2wAAEPfYdriBs266.jpg" target="_blank"></a>

執行後,我們可以檢視任務管理器下的java程序

<a href="http://s3.51cto.com/wyfs02/M02/6F/5A/wKioL1WaGiTgbKgAAARsQeYGlgQ531.jpg" target="_blank"></a>

本文轉自 高文龍 51CTO部落格,原文連結:http://blog.51cto.com/gaowenlong/1670983,如需轉載請自行聯系原作者