Windows
如果日誌文件中出現錯誤消息,請重新啟動 Windows 服務
正如所見,該服務執行良好,
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-Service
andStart-Service
(它在 1.0 中可用嗎?)。其次,但是沒有自己測試過,你需要做兩件事:
- 將您的腳本置於無限循環中,睡眠或每分鐘從任務調度程序啟動腳本。
- 將您更改
Select-String
為使用-Quiet
返回 a 的選項bool
比它應該簡單
if(Get-Content error.log -Wait | Select-String -pattern "I just died" -Quiet){ #stop and start services here }
希望能幫助到你。