BAT批處理判斷服務是否正常執行的方法(批處理命令綜合應用)
先給大家普及下批處理的基本概念
批處理(Batch),也稱為批處理指令碼。顧名思義,批處理就是對某物件進行批量的處理,通常被認為是一種簡化的指令碼語言,它應用於DOS和Windows系統中。批處理檔案的副檔名為bat 或cmd。目前比較常見的批處理包含兩類:DOS批處理和PS批處理。PS批處理是基於強大的圖片編輯軟體Photoshop的,用來批量處理圖片的指令碼;而DOS批處理則是基於DOS命令的,用來自動地批量地執行DOS命令以實現特定操作的指令碼。更復雜的情況,需要使用if、for、goto等命令控制程式的執行過程,如同C、Basic等高階語言一樣。如果需要實現更復雜的應用,利用外部程式是必要的,這包括系統本身提供的外部命令和第三方提供的工具或者軟體。批處理程式雖然是在命令列環境中執行,但不僅僅能使用命令列軟體,任何當前系統下可執行的程式都可以放在批處理檔案中執行。
前言
某qlik sense伺服器需要一個health check(健康狀態監測)的程式,所以就有了一下的批處理指令碼。
大致功能如下:
- 批處理獲取當前日期時間
- 批處理生成動態的檔名
- 批處理輸出echo到日誌檔案
- 批處理遍歷列表list
- 批處理函式與call函式
- 判斷服務是否執行中
- 批處理count計數
- 批處理copy複製檔案
- 批處理判斷大於gtr(記住那輛跑車名,批處理大於、小於、等於、不小於、不大於和不等於)
@echo off color 2E set YYYYmmdd=%date:~0,4%%date:~5,2%%date:~8,2% set hhmiss=%time:~0,2%%time:~3,2%%time:~6,2% set filename=healthcheck.log REM set "filename=healthcheck_%YYYYmmdd%_%hhmiss%.log" set "datetime=%YYYYmmdd%%hhmiss%" set allCount=0 set errorCount=0 set checkList="QlikSenseServiceDispatcher" "QlikSenseSchedulerService" "QlikSenseRepositoryService" "QlikSenseRepositoryDatabase" "QlikSenseProxyService" "QlikSensePrintingService" "QlikSenseEngineService" "QlikLoggingService" echo ============================================ >%filename% echo Health Checking by Qlik Team >>%filename% echo zhengkai.blog.csdn.net echo (datetime: %datetime% ) >>%filename% echo ============================================ >>%filename% echo. >>%filename% echo. >>%filename% for %%L in (%checkList%) do call :health_check %%L echo ============================================ >>%filename% echo Checking Finish. >>%filename% echo. >>%filename% echo Error : %errorCount% of %allCount% >>%filename% echo. >>%filename% echo ============================================ >>%filename% call :check_status echo ============================================ >>%filename% goto:end :health_check sc query |find /i %1 >nul 2>nul if not errorlevel 1 ( echo SUCCESS...... %1 >>%filename% )else ( echo FAILD...... %1 is error ! >>%filename% set /a errorCount+=1 ) set /a allCount+=1 goto:eof :check_status if %errorCount% gtr 0 ( echo ###### this server is Not Health >>%filename% ) else ( echo ###### this server is Health >>%filename% ) goto:eof :end copy %filename% \\xxxx\DataShare\CSDN\ZhengKai\
批處理獲取當前日期時間,生成動態的檔名
set YYYYmmdd=%date:~0,2% set "filename=healthcheck_%YYYYmmdd%_%hhmiss%.log" echo %filename%
批處理輸出echo到日誌檔案
- > 就是清空輸出檔案,重新輸出層
- >> 就是追加到日子和檔案
echo ============================================ >%filename% echo Health Checking by Qlik Team >>%filename% echo ============================================ >>%filename%
批處理遍歷列表list
定義在一個List會後,就可以開始使用
- for %%L 用什麼變數來遍歷
- in (%checkList%) 遍歷哪個陣列
- do echo %%L 遍歷來做什麼
set checkList="QlikSenseServiceDispatcher" "QlikSenseSchedulerService" "QlikSenseRepositoryService" "QlikSenseRepositoryDatabase" "QlikSenseProxyService" "QlikSensePrintingService" "QlikSenseEngineService" "QlikLoggingService" echo ============================================ >%filename% echo Health Checking List >>%filename% for %%L in (%checkList%) do echo %%L echo ============================================ >>%filename%
批處理函式與call函式
定義一個:function_name,中間是函式內容,後面以goto:eof結尾
call :check_status :check_status if %errorCount% gtr 0 ( echo ###### this server is Not Health >>%filename% ) else ( echo ###### this server is Health >>%filename% ) goto:eof
批處理count計數
計數加一 set /a allCount+=1
set allCount=0 for %%L in (%checkList%) do set /a allCount+=1
批處理copy複製檔案
- 複製檔案 copy 檔名 目錄頁
- 複製資料夾用xcopy,指定的目錄連檔案和目錄結構一併拷貝
copy %filename% "\\xxxx\DataShare\CSDN\ZhengKai\"
批處理大於、小於、等於、不小於、不大於和不等於
- EQU - 等於
- NEQ - 不等於
- LSS - 小於
- LEQ - 小於或等於
- GTR - 大於
- GEQ - 大於或等於
if %errorCount% gtr 0 ( echo ###### this server is Not Health >>%filename% ) else ( echo ###### this server is Health >>%filename% )
總結
以上所述是小編給大家介紹的BAT批處理判斷服務是否正常執行的方法(批處理命令綜合應用),希望對大家有所幫助,也非常感謝大家對我們網站的支援!