我有一个Ant脚本,用于一次在两台不同的机器上部署我的应用程序。使用本地机器我没有问题,但是当谈到远程机器时,我想检查Jboss是否启动。如果它已经启动,那么我想关闭它,但如果它没有,那么什么都不应该。我尝试将<sshexec>
的属性保持为failonerror="on"
来实现此目的。当Jboss已经关闭并且shutdown命令仅提供一些错误时,这很有效。但是我遇到的真正问题是当Jboss运行时以及执行shutdown命令时,它没有正确关闭并且出现了一些错误。在这些情况下,我想停止构建脚本并让用户知道另一台机器上的Jboss有问题需要查看。
停止远程Jboss的目标代码是
<target name="stopRemoteJboss" description="Stops Remote Instance of Jboss">
<echo message="Stopping Remote Jboss" />
<sshexec trust="true" host="${jboss.remote.host}" username="${jboss.remote.username}" password="${jboss.remote.password}" command="${jboss.remote.home}/bin/shutdown.sh -S" port="${jboss.remote.port}"/>
</target>
答案 0 :(得分:1)
经过简短的检查后,我发现了以下内容,也许您可以重复使用/或将其用作脚本的灵感来源:http://shrubbery.homeip.net/c/display/W/Starting+JBoss+with+ANT
您的相关部分似乎是:
<java jvm="@{jdkHome}/bin/java"
classname="org.jboss.Shutdown" fork="true" failonerror="false" resultproperty="shutdown.rc">
<arg line="-s jnp://@{bindAddr}:@{jnpPort}"/>
<classpath>
<pathelement path="@{jbossInstallDir}/bin/shutdown.jar"/>
<pathelement path="@{jbossInstallDir}/client/jbossall-client.jar"/>
</classpath>
</java>
<echo>Shutdown rc = ${shutdown.rc}</echo>
<condition property="shutdown.okay">
<equals arg1="${shutdown.rc}" arg2="0"/>
</condition>
<fail unless="shutdown.okay" message="Unable to shut down JBoss (maybe it hasn't fully started yet?)."/>
<echo>Waiting for @{bindAddr}:@{jnpPort} to stop listening...</echo>
答案 1 :(得分:1)
为什么不检查远程端口是否处于活动状态?
<project name="demo" default="check">
<condition property="server.running" value="running" else="not running">
<socket server="remoteserver" port="80"/>
</condition>
<target name="check" description="Print status message">
<echo message="Web server status: ${server.running}"/>
</target>
</project>
如果您的JBoss实例配置为反向代理,您可以使用备用http condition来检查HTTP响应代码(如果应用程序服务器已关闭,则为503“服务不可用”)