1. 程式人生 > >Windows環境下批處理實現守護程序

Windows環境下批處理實現守護程序

這個指令碼提供兩種方式守護,一種是通過程序名,但對於程序名都是java.exe的java程式不適用,另一種是通過netstat查詢應用程式所監聽的埠是否正在被監聽。這兩種方式可以在指令碼中通過兩個冒號註釋來選擇切換。下面是設定成通過埠來守護的,當埠沒被監聽則開啟一個zip檔案,所以執行後會發現沒過5秒會重複開啟這個zip檔案,除非這個zip檔案開啟後會自動監聽8080埠,那當然是不可能的!指令碼涉及的命令就不解釋了搜一下就知道了。

@echo off

::檢測時間間隔,單位:秒
set _interval=5

::需要守護的程序名稱
set _processName=WinRAR

::需要守護的程序啟動命令
set _processCmd=C:\ideavim-0.32.zip

::需要守護的程序預估啟動完畢所需時間,單位:秒
set _processTimeout=10

::需要守護的程序所監聽的埠
set _port=8080

::程序使用者名稱,一般是Administrator
set _username=Administrator 

:LOOP
set /a isAlive=false

::通過程序名稱檢測
::tasklist /FI "username eq %_username%" | find /C "%_processName%" > temp.txt
::set /p num= < temp.txt
::del /F temp.txt

::通過程序的埠是否正在被監聽檢測
netstat -an | find /C "0.0.0.0:%_port%" > temp.txt
set /p num= < temp.txt
del /F temp.txt

if "%num%" == "0" (
start %_processCmd% | echo 啟動 %_processName% 於 %time%
choice /D y /t %_processTimeout% > nul
)

if "%num%" NEQ "0" echo 已啟動

::ping -n %_interval% 127.1>nul
choice /D y /t %_interval% >nul

goto LOOP
該指令碼執行後會出現一個dos視窗,若覺得礙眼可以用記事本將下面儲存為副檔名為.vbs的檔案。其中guard.bat是上面批處理儲存的檔名。兩個檔案放在同一目錄下雙擊vbs檔案後,守護程序就在後臺運行了,單這樣得通過資源管理器結束cmd程序才能停止守護程序。

set ws=WScript.CreateObject("WScript.Shell")
ws.Run "guard.bat",0

 

親測可用。

--------------------- 
作者:qin9r3y 
來源:CSDN 
原文:https://blog.csdn.net/qin9r3y/article/details/22805095 
版權宣告:本文為博主原創文章,轉載請