Windows

如果日誌文件中出現錯誤消息,請重新啟動 Windows 服務

  • February 7, 2020

正如所見,該服務執行良好,sc query但它不起作用。當它停止工作時,日誌文件中出現錯誤。所以我想在日誌文件上執行一種tail -f,並在發生錯誤時重新啟動服務。

我有 Powershell 版本 1,所以我可以用這個來跟踪錯誤:

Get-Content error.log -Wait | Select-String -pattern "I just died"

但是每次找到模式時如何執行命令呢?

我想執行的命令是:

echo "Stopping service" >> restart.log
sc stop "Floffy dude"
sc start "Floffy dude"
Get-Date >> restart.log
echo "Restart done" >> restart.log

我不必成為一個惡魔。我可以在 cmd.exe 中執行它。

其他無需安裝更多軟體即可在 Windows Server 2008 上執行的解決方案非常受歡迎。

編輯:根據輸入我想出了這個腳本:

Get-Content -Wait error.log | Select-String -SimpleMatch "I just died" | ForEach-Object -Process {
   $now = Get-Date -Format "yyyy-MM-dd HH:mm"
   Echo "$now Restart: Floffy - $_"
   Restart-Service "Floffy"
   $now = Get-Date -Format "yyyy-MM-dd HH:mm"
   Echo "$now Restart done."
}

它似乎工作。

我可以從任務調度程序執行,但是我必須檢查它是否是我已經響應的舊錯誤。

首先,您不需要sc控制您的服務。只需使用Stop-Serviceand Start-Service(它在 1.0 中可用嗎?)。其次,但是沒有自己測試過,你需要做兩件事:

  1. 將您的腳本置於無限循環中,睡眠或每分鐘從任務調度程序啟動腳本。
  2. 將您更改Select-String為使用-Quiet返回 a 的選項bool

比它應該簡單

if(Get-Content error.log -Wait | Select-String -pattern "I just died" -Quiet){
  #stop and start services here
}

希望能幫助到你。

引用自:https://serverfault.com/questions/792686