- 持續檢查某個程序是否仍在執行。
- 若發現停止執行,重新啟動。
- 發現問題時以 Email 通知。
Google 了一下發現兩篇:參考一 參考二
第一個範例已經相當完整,指令模式下寄信使用了 SendEmail
流程圖:
以下是最後完整的BAT檔內容:
echo off
echo ******************** 啟動偵測 ************************* >>C:\Log\Detection.log
echo %date% %time% >>C:\Log\Detection.log
tasklist /FI "IMAGENAME eq xxx.exe" /FO CSV > C:\Log\Dtemp.log
FOR /F %%A IN (C:\Log\Dtemp.log) do if %%A == 資訊: goto process_off
:process_on
echo 程式偵測成功 >>C:\Log\Detection.log
goto end
:process_off
C:\sendEmail.exe -f fromuser@yyy.com -u [警告] 程式偵測失敗重新啟動 -m 程式偵測失敗,於 %date% %time% 嘗試重新啟動。 -t touser@yyy.com -s smtp.yyy.com:25 -o message-charset=big5 -o message-content-type=text -l C:\Log\SendEmail.log -o tls=no
echo 程式偵測失敗,重新啟動。 >>C:\Log\Detection.log
echo 發送通知信件至 touser@yyy.com >>C:\Log\Detection.log
start C:\xxx.exe
:end
echo ******************************************************* >>C:\Log\Detection.log
步驟如下:
- 建立一個BAT檔,內容如上。
- 自行建立目錄與 log 檔,替換上述的路徑。
- Detection.log 是執行紀錄,會一直累積。( >> 應該就是Append?)
- Dtemp.log 是偵測暫存紀錄,每次偵測都會覆寫。( > 應該就是覆寫)
- 偵測不到時,log 到的字串開頭會是"資訊",以此為判斷依據重新執行程序。
- 開發時可以先執行 tasklist 那行,確認偵測不到的字首是否為"資訊"兩個字。
- 綠色部分為發送 Email 相關,如無此需求可跳過,相關參數可參考官網。
- 中文內容我修改參數為 -o message-charset=big5 才成功,原本信件會亂碼。
- BAT最後請另存為ANSI,避免 log 檔中文亂碼,BAT也會無法執行。
ps. 執行檔名與路徑不可有中文,路徑內若有空白,前後要加上雙引號。