我们有一个在 Windows Server 2003 机器上运行的服务。该服务监视 FTP 服务器上的特定文件夹,当文件出现在那里时,它会调用几个不同的可执行文件之一来处理它们。
我被要求找到一种方法,以便在此服务挂起或停止时以某种方式提醒员工。
任何人都可以用这么多信息提出任何建议吗?如果没有,你还需要知道什么?
似乎我们可以编写另一个服务来观看这个服务,但是有一个机会会停止......所以我们还没有解决任何问题。
关于我唯一知道的是否是编写另一个应用程序或服务来监视该服务是否正在运行;类似的事情不应该有任何意外的行为并希望停止。
另一件事是转到 Windows 中的服务,转到其属性,然后转到恢复选项。从这里,您可以设置服务失败时的行为。Windows 7 中的选项是重新启动服务或计算机,或运行程序。该程序可以发送某种通知。但是,我不知道 Server 2003 中是否存在任何或所有这些选项。如果服务只是挂起,这也不太可能起作用,但监视它的服务可能也不会。
另外,如果你有源代码,你可以重写一些与服务相关的方法,例如OnStop()
(用于 C#)来发送通知,但我不认为这适用于失败。
我个人的选择是设置恢复选项只是为了在失败时重新启动服务,除非它反复失败,这也是一个选项。但只要做你认为最适合你的事情;没有真正的故障安全方法来做到这一点。
更新:我确实检查过,Server 2003 确实在服务管理器中有相同的恢复选项。正如上面的人所说,你可以处理这个问题,但据我所见,它只是在 C++ 中;还有一种命令提示符方式可以做到这一点:
sc failure [servicename] reset= 0 actions= restart/60000
我在这里找到了该命令,您可以在其 MSDN文档中查看更多信息。如果您不使用 C++,您可以从 C# 或其他语言调用此命令,如果您没有源代码,则可以直接从命令提示符使用它。
使用ChangeServiceConfig2()为您的服务定义失败操作。如果服务意外终止,您可以使用它来调用外部命令来发出警报(或执行您想要的任何其他操作)。
SCM(处理服务的组件)具有内置的自动重启逻辑,您可以根据需要利用它来重启服务。另外和/或替代地,您可以配置“自定义操作”以与服务故障相关联 - 自定义操作可以包括启动您自己的程序,然后该程序可以记录故障,并可能手动重新启动您的服务。
通过查看用于配置此类操作的结构的文档,您可以在 MSDN 上阅读有关此类自定义操作的更多信息:SERVICE_FAILURE_ACTIONS
. 填写完该结构后,您可以通过调用该ChangeServiceConfig2
函数来通知 SCM。
请不要问“好吧,如果我的失败处理程序崩溃会发生什么”:)