我们有大约十几个 Windows 服务,包括内部开发的和第三方产品,对管理它们有以下要求:
- 在一周中的某几天、某天的预定时间启动/停止/恢复指定服务。
- 可选地监控服务:如果监控的服务意外停止,则发送通知电子邮件,并可选地启动它。
这些似乎是相当基本的要求,但我没有找到任何简单的方法可以通过内置的 Windows 功能或简单且价格合理的第三方工具来满足它们。这肯定是一个已经解决的问题吧?!我希望能立即找到一些开源工具来做到这一点。
一个可选的“花哨”要求是: - 对手动干预的认识,使得该工具不会干扰手动操作。例如,能够通过执行监控的相同工具以交互方式停止和启动服务,和/或能够通知该工具正在进行手动干预。
任何想法都值得赞赏。
答案1
如果您想按计划停止和启动服务,那么为什么不使用 Windows 内置的作业调度程序呢?它完全有能力做这种事情 - 它可以运行命令,您可以简单地将其与旨在启动和停止服务的批处理作业一起使用。
至于监控服务 - 您可以再次使用服务本身的恢复选项 - 选择“运行程序”并使用它来运行发送电子邮件通知的批处理作业(通过类似布拉特如果您想让它变得简单),然后重新启动该服务。
答案2
如果您想坚持使用 Windows 工具(除了使用 blat.exe 发送电子邮件,它实际上是一个很棒的命令行 smtp 电子邮件),RobM 和 HopelessN00b 的建议很好。
既然您提到对第三方实用程序感兴趣,我们的(免费)监控软件活动哨兵灯应该能够满足您的所有要求 - 使用一个免费软件:
- 监控服务:当服务状态改变时它会通知您。
- 更改服务状态:我们的“应用程序调度程序”允许您安排简单的脚本,在这种情况下,您只需利用 sc.exe 在指定时间停止和启动服务。
- 控制服务:您可以指定所需的服务状态,在这种情况下,EventSentry 将尝试始终保持服务处于该状态。
应用程序调度程序的优点是它可以捕获事件日志中命令行进程的输出,因此如果服务重启不起作用(无论出于何种原因),那么您可以立即收到包含整个命令行输出的通知。
答案3
对于监控:有一个内置功能,当您单击 中的服务属性时,查看“恢复”选项卡services.msc
。如果服务失败,您可以“运行程序”,例如,该程序可以是发送电子邮件的脚本。还有几十种网络监控解决方案可以监控 Windows 服务,Nagios、PRTG、OpenNMS 等等。
答案4
此 PowerShell 脚本监视 Windows 服务何时启动和停止:
$services = @{};
while ($true)
{
foreach ($service in @(Get-Service))
{
$oldStatus = $services[$service.Name];
$newStatus = $service.Status;
if (!$oldStatus)
{
echo "$newStatus $($service.Name) ($($service.DisplayName))"
}
elseif ($oldStatus -ne $newStatus)
{
echo "$oldStatus -> $newStatus $($service.Name) ($($service.DisplayName))"
}
$services[$service.Name] = $newStatus;
}
Start-Sleep 1
}
示例输出:
Stopped AarSvc_e22aba (Agent Activation Runtime_e22aba)
Stopped AJRouter (AllJoyn Router Service)
Stopped ALG (Application Layer Gateway Service)
Running AMD External Events Utility (AMD External Events Utility)
...
Stopped XblAuthManager (Xbox Live Auth Manager)
Stopped XblGameSave (Xbox Live Game Save)
Stopped XboxGipSvc (Xbox Accessory Management Service)
Stopped XboxNetApiSvc (Xbox Live Networking Service)
Running -> Stopped camsvc (Capability Access Manager Service)
Stopped -> Running camsvc (Capability Access Manager Service)
Stopped -> Running ClipSVC (Client License Service (ClipSVC))
Running -> Stopped camsvc (Capability Access Manager Service)
Running -> Stopped ClipSVC (Client License Service (ClipSVC))
Running -> Stopped AppXSvc (AppX Deployment Service (AppXSVC))
Stopped -> Running AppXSvc (AppX Deployment Service (AppXSVC))
Stopped -> Running ClipSVC (Client License Service (ClipSVC))
Stopped -> Running WerSvc (Windows Error Reporting Service)