我们有几个在Windows 2003/2008服务器上运行的应用程序。其中一些应用程序是Java JAR文件,使用app.cmd文件通过Scheduled Task
启动。
其他是"大",如SQL Server和IIS。
我想写一个应用程序(或服务,实际上),只是监视这些程序,看看他们是否正在运行。
这比我以前做过的要多一点。哦,这需要用c#写。
我正在考虑某种类型的"心跳"模式,以便每隔几分钟,我检查线程是否正在运行(再次,新的高级线程),如果是,发送一个"一切正常"消息(使用SMTP或其他东西)。
有什么建议吗?
谢谢你的建议
您可以使用Process.GetProcesses()
:
使用此方法创建新的Process组件数组,并将它们与本地计算机上的所有进程资源相关联。
您可能应该逐个处理每个应用程序,例如,虽然您可以检查SQL Server进程的存在性,但您最好运行查询(例如)检查服务器中给定数据库的存在性。
同样,你也可以对IIS服务器运行一个简单的HTTP请求来检查是否正确设置了权限等…
显然,你测试你的Java进程的方式将取决于他们做什么,尽管你仍然可以只是检查,看看进程是否正在运行(要注意,如果他们作为一个服务运行,他们可能运行在svchost.exe进程中的一个-这并不适用于计划任务,虽然)。