如果尚未启动,Ant将启动服务
我的要求是从Ant启动窗口服务。 这是我的密码:如果尚未启动,Ant将启动服务,ant,windows-services,Ant,Windows Services,我的要求是从Ant启动窗口服务。 这是我的密码: <target name="copy"> <exec executable="net"> <arg value="START"/> <arg value="SomeService"/> </exec> </target> 如果服务还没有启动,它就可以正常工作。但是,如果服务已经启动,它会返回异常结果:2
<target name="copy">
<exec executable="net">
<arg value="START"/>
<arg value="SomeService"/>
</exec>
</target>
如果服务还没有启动,它就可以正常工作。但是,如果服务已经启动,它会返回异常结果:2(1)使用BAT文件:,正如Rao在评论中指出的,您可以编写一个批处理文件来检查服务是否正在运行,如果没有,则启动它,如下所述:。这可以在ant
目标中使用
命令调用
(2)仅使用ANT目标:或者,如果您不需要额外的批处理文件,您可以通过
cmd/C
调用带有
语句的ANT
目标调用相应的单行命令。在我的示例中,服务名称是“JBossEAP7”,这将是需要替换服务名称的字符串
<target name="run-jboss-service-if-not-already-running">
<exec dir="bin/" executable="cmd" spawn="false" failonerror="true">
<arg value="/c"/>
<arg value=""for /f "tokens=3 delims=: " %H in ('"sc query JBossEAP7 | findstr "STATE""') do if not "%H"=="RUNNING" net START JBossEAP7 "" />
</exec>
</target>
更详细一点:
- 第一个目标(
)再次运行check jboss service running
语句,该语句执行
,调用cmd
检查服务的状态。如果未运行sc query
,则退出
,返回cmd
。接下来,根据返回代码,在1
语句中设置或不设置属性jboss service.running
- 第二个目标(
)仅在未设置属性start jboss service
时执行。它启动服务,如果成功,则在jboss service.running
语句中设置属性jboss service.running
- 第三个目标可以是在服务运行后,接下来要做的任何事情。仅当设置了属性
时,才会执行该命令,该属性应该由第一个或第二个目标完成jboss service.running
两条评论: (1) 当然,除了“运行”和“停止”之外,还有其他状态。因此,您的服务(例如,当前正在启动或关闭)将执行
net
命令,即使您可能不希望执行该命令
(2) 根据您正在检查或启动的服务,您可能需要引入延迟,以确保服务所做的任何事情都实际启动并运行。例如,在我的示例中,JBoss可能正在运行,但部署的web应用程序需要额外的时间才能响应。(1)使用BAT文件:正如Rao在评论中指出的,您可以编写一个批处理文件,检查服务是否正在运行,如果没有,则启动它,如下所述:。这可以在ant
目标中使用
命令调用
(2)仅使用ANT目标:或者,如果您不需要额外的批处理文件,您可以通过
cmd/C
调用带有
语句的ANT
目标调用相应的单行命令。在我的示例中,服务名称是“JBossEAP7”,这将是需要替换服务名称的字符串
<target name="run-jboss-service-if-not-already-running">
<exec dir="bin/" executable="cmd" spawn="false" failonerror="true">
<arg value="/c"/>
<arg value=""for /f "tokens=3 delims=: " %H in ('"sc query JBossEAP7 | findstr "STATE""') do if not "%H"=="RUNNING" net START JBossEAP7 "" />
</exec>
</target>
更详细一点:
- 第一个目标(
)再次运行check jboss service running
语句,该语句执行
,调用cmd
检查服务的状态。如果未运行sc query
,则退出
,返回cmd
。接下来,根据返回代码,在1
语句中设置或不设置属性jboss service.running
- 第二个目标(
)仅在未设置属性start jboss service
时执行。它启动服务,如果成功,则在jboss service.running
语句中设置属性jboss service.running
- 第三个目标可以是在服务运行后,接下来要做的任何事情。仅当设置了属性
时,才会执行该命令,该属性应该由第一个或第二个目标完成jboss service.running
两条评论: (1) 当然,除了“运行”和“停止”之外,还有其他状态。因此,您的服务(例如,当前正在启动或关闭)将执行
net
命令,即使您可能不希望执行该命令
(2) 根据您正在检查或启动的服务,您可能需要引入延迟,以确保服务所做的任何事情都实际启动并运行。例如,在我的示例中,JBoss可能正在运行,但在部署的web应用程序响应之前需要额外的时间。我认为,您应该首先找到服务是否正在运行,否则启动。了解如何检查sameANT是java构建工具。使用像chef这样的配置管理工具来管理服务器上的服务不是更合适吗?我不同意。ANT并不仅仅用于构建java应用程序。它通常适用于“试验任何类型的过程,这些过程可以用目标和任务来描述”。因此,检查服务是否正在运行完全在ANT目标的范围内。我认为,您应该首先找到服务是否正在运行,否则就启动。了解如何检查sameANT是java构建工具。使用像chef这样的配置管理工具来管理服务器上的服务不是更合适吗?我不同意。ANT并不仅仅用于构建java应用程序。它通常适用于“试验任何类型的过程,这些过程可以用目标和任务来描述”。因此,检查serive是否正在运行完全在ANT目标的范围内。