這個腳本提供兩種方式守護,一種是通過進程名,但對於進程名都是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