在Java中,有什么方法可以检查Windows服务的状态?
时间:2020-03-06 14:39:48 来源:igfitidea点击:
我正在寻找一个允许我查找Windows服务状态以验证该服务已启动并正在运行的库。我查看了Sigar库,但是它是GPL,因此我无法使用它。需要商业或者BSD(ish)许可,因为它将与商业软件捆绑在一起。
解决方案
我不知道任何库,但是取决于我们需要获取的详细程度,我们可能会通过一些shell命令并解析输出来了解。
NET START服务名称
将启动该服务,或者返回一条错误消息,告诉我们该服务已启动。我不知道有什么命令会给我们状态。
我不认为有任何纯Java的方式可以做到这一点,因为某些操作系统没有Windows那样的"服务"概念。在我们的项目中,我们围绕从命令行对" sc"命令的调用编写了包装器。要获取服务状态,我们可以执行以下操作:
sc \some-computer query "my service name"
我们必须手动解析输出,但这非常简单。
如果没有其他帮助,请尝试考虑稍有不同的方法(如果可以的话),例如:
- 有很多免费/非免费软件可以进行监视,包括Windows服务监视(例如nagios,Zabbix等)。这些监视器通常具有开放的API,Java应用程序可以通过多种不同的方式集成到这些API中。
- 如果我们可以控制依赖的服务应用程序,请为Java应用程序提供另一种不同的检查方式(例如在端口上运行虚拟侦听器,创建文件等)。 Windows服务不是跨平台的,因此也不希望很快得到支持。