Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果尚未启动,Ant将启动服务_Ant_Windows Services - Fatal编程技术网

如果尚未启动,Ant将启动服务

如果尚未启动,Ant将启动服务,ant,windows-services,Ant,Windows Services,我的要求是从Ant启动窗口服务。 这是我的密码: <target name="copy"> <exec executable="net"> <arg value="START"/> <arg value="SomeService"/> </exec> </target> 如果服务还没有启动,它就可以正常工作。但是,如果服务已经启动,它会返回异常结果:2

我的要求是从Ant启动窗口服务。 这是我的密码:

<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="&quot;for /f &quot;tokens=3 delims=: &quot; %H in ('&quot;sc query JBossEAP7 | findstr &quot;STATE&quot;&quot;') do if not &quot;%H&quot;==&quot;RUNNING&quot; net START JBossEAP7 &quot;" />
    </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="&quot;for /f &quot;tokens=3 delims=: &quot; %H in ('&quot;sc query JBossEAP7 | findstr &quot;STATE&quot;&quot;') do if not &quot;%H&quot;==&quot;RUNNING&quot; net START JBossEAP7 &quot;" />
    </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目标的范围内。