Powershell实现服务守护进程功能(服务意外终止则重启)
简介
Windows的服务是脆弱的,有时候服务关联的进程因为有一些unexpected exception而异常,进而导致服务挂掉,这个时候我们需要setup一个守护批处理来守护这个服务。
解决方案
一、持续守护型
- 使用 while 循环持续检测服务状态。
- 如果服务状态为 Stopped,则自动启动。
- 可用 Start-Service 启动服务。
$serviceName = "YourServiceName" # 替换为你的服务名while ($true) {$service = Get-Service -Name $serviceName -ErrorAction SilentlyContinueif ($service.Status -eq 'Stopped') {Write-Host "$(Get-Date): $serviceName stopped, restarting..."Start-Service -Name $serviceName}Start-Sleep -Seconds 10 # 每10秒检查一次}
二、间歇守护型
只需要基本的停止则重启服务
$service = Get-Service -Name $serviceName -ErrorAction SilentlyContinueif ($service.Status -eq 'Stopped') {Write-Host "$(Get-Date): $serviceName stopped, restarting..."Start-Service -Name $serviceName}
如何运行?
后台运行
可用 Start-Job 或 Start-Process 让脚本后台运行。
Start-Job -ScriptBlock { & "C:\path\to\monitor-service.ps1" }
计划任务
在Widnows的Task Scheduler可将脚本设置为开机自启(如放入计划任务),或者间歇1分钟/5分钟运行。