偵測程式是否正常持續啟動~利用批次檔來自動檢查並紀錄和通知

最近公司 Windows Server 2008 系統放了一個重要又需要不能中斷執行的程式,為了怕他不明原因停止執行而我們卻沒發現,所以小編簡單寫了一個批次檔定期檢查程式是否正常執行,並多加一個簡單的紀錄和郵件通知功能。
0

小編利用一個簡單遠端連線管理程式 Supremo.exe 來做示範(程式可參考阿榮福利味)!批次檔程式內容:
echo off
echo ******************** 程式偵測 ************************* >>f:\log\Detection.log
echo 時間:%date% %time% >>f:\log\Detection.log
tasklist /FI “IMAGENAME eq Supremo.exe” /FO CSV > f:\log\Dtemp.log
FOR /F %%A IN (F:\log\Dtemp.log) do if %%A == 資訊: goto process_off
:process_on
echo 程式偵測存在成功 >>f:\log\Detection.log
goto end
:process_off
C:\Windows\sendEmail.exe -f abc@abc.com -u [警告] 程式偵測失敗重新啟動 -m 程式偵測失敗重新啟
動,發生時間 %date% %time% -t touser@abc.com -s mail.abc.com:25 -xu smtpuser -xp smatuerpassword -o message-content-type=html
-o message-charset=utf8 -o tls=no
echo 程式偵測不存在重新啟動 >>f:\log\Detection.log
echo 已發送緊告信件至touser@abc.com >>f:\log\Detection.log
start F:\Supremo.exe
:end
echo ************************************************************* >>f:\log\Detection.log

程式說明:
1. 先指定此批次檔自動寫一個 Detection.log ,並加註執行日期。(後面要 Troubleshooting 會比較好做)

2. 將工作管理員的 process 為 Supremo.exe 的寫入到 Dtemp.log 檔案。

3. 讀出 Dtemp.log 裏面的每一行,如果第一行的開頭為「資訊」,則程式直接跳到 process_off,否則繼續到 process_on。(小編是在 Windows Server 2008 系統上作業,執行這一段時可能會因不同的系統出現找不到檔案錯誤訊息,因為輸出不一樣的資訊,可以先執行一次後打開 Dtemp.log 檔案看輸出的結果,來調整當執行檔找不到的這個開頭字串要輸入什麼。)
2

4. 如果到 process_on,即在工作管理員 process 有此程式正在運行,多加一個備註「程式偵測存在成功」到 當日的 Detection.log 裡,在跳到 end。
1

5. 如果到process_off,先發一封警告信給 touser@abc.com ,並多加一個備註「程式偵測不存在重新啟動」、「已發送緊告信件至touser@abc.com 到當日的 Detection.log,並再啟動指定的執行檔,完成批次檔動作,以下是警告信的內容。
3
以下是 Detection.log 內容。
4

注意事項:
1. 你可以把上面這段指令中紅色的部份,換成出現在工作管理員的 process(TaskList)的執行檔名,粉紅色為每日紀錄檔,換成你的執行檔完整路徑+檔名。綠色為偵測工作管理員的 process程式 log,一樣換成你的執行檔完整路徑+檔名,最後藍色的部分就是郵件通知的部分請依照您的環境來更換。
2. 執行檔檔名和路徑不能有中文,若路徑有空白記得前後面要加雙引號,否則不能正確執行。
3. 對了,批次檔手動測試沒有問題後,記得放到工作管理員設定排程,讓批次檔定時去檢查你的執行檔有沒有正常執行嘿!打完收工,有問題再討論喔。

 

“偵測程式是否正常持續啟動~利用批次檔來自動檢查並紀錄和通知” 有 15 則留言.

  1. 感謝分享,寫得很詳細!
    可是我遇到幾個問題,不知是否能幫忙?
    1.message-charset我試過utf-8、utf8、big5,寄出的郵件都是亂碼
    2.mail有成功寄出,log檔也正常寫入及顯示,可是cmd有錯誤訊息 "’-o’ 不是內部或外部命令、可執行的程式或批次檔。"我找不到該修改哪裡

    謝謝你

    回覆
  2. 感謝分享,已成功監控”Becky! Ver.2″這套郵件軟體,若沒開會自動執行。
    請教若是軟體本身卡住(ex:卡住沒收發信),但工作管理員的 process仍存活著,
    這樣的話能怎麼偵測嗎?

    回覆
    • 你只能寫另一個程式去測試郵件軟體是否能夠正常運作,如 Telnet 25 port,若不能正常運作則強迫關閉再開啟。

      回覆
  3. 您好,請問sendEmail.exe用您上方提供的連結已無法下載,可否請您寄信提供給我,謝謝。
    我的MAIL:chfainfo511@gmail.com

    回覆

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料