【问题标题】:Does windows stop services gracefully or kills them when an error (memory overflow, etc) occurs?当发生错误(内存溢出等)时,Windows 是否会优雅地停止服务或终止服务?
【发布时间】:2021-09-18 01:55:30
【问题描述】:

首先对我糟糕的英语感到抱歉。我真的不知道如何提出这个问题,但我可以向您解释我的意图,以便您更好地理解我。

我正在开发当 Windows 服务出现故障时通知您的工具。

我遵循的确切逻辑是:

  1. 当服务关闭时,会优雅地记录您可以在 Windows 事件查看器中看到的事件。我创建了一个计划任务,当服务根据 Windows 事件日志停止时将触发该任务(感谢 XML 过滤器)。
  2. 此任务会触发一个 powershell 脚本,该脚本会向电报机器人发送请求,该机器人将在服务终止时通知我。

当我手动停止服务(来自 service.msc 或 Powershell 的 Stop-Service)时,此过程完美运行。目标是实时跟踪服务,并在这种情况下正常工作。

问题来了:我不能强制服务崩溃以查看它是否在 Windows 事件查看器中记录信息。

我的问题是:

  1. 如果发生错误,Windows 会优雅地关闭服务(如使用 Stop-Service 时)还是会在不注册任何日志信息的情况下终止进程(如使用 taskkill /f 时)?
  2. 还有其他建议吗?是否有另一种方法可以实时跟踪 Windows 服务并触发脚本,而无需每隔一定时间运行一次循环。

希望你们能理解我:)

【问题讨论】:

    标签: windows logging events service task


    【解决方案1】:

    如果服务崩溃,您仍应在 Windows 日志 > 系统 下的事件日志中看到错误消息。 Source 将为“Service Control Manager”,Event ID 应为 7031 或 7032 或 7034。

    因此,您可以为这些事件添加一个过滤器,并让您的 PowerShell 脚本也针对这些事件运行。

    【讨论】:

    • 谢谢,正如您所说,如果服务意外停止,它将在windows事件查看器的系统通道中注册。
    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    相关资源
    最近更新 更多