调用Tomcat startup.sh时,Ant SSHExec任务不会返回

时间:2014-01-12 05:19:49

标签: tomcat ant

从我的(Windows)桌面或(Windows或Unix)Jenkins服务器(我相信使用相同的底层JSch技术),我似乎无法调用Tomcat bin目录中的startup.sh脚本至。 Tomcat(7)位于Solaris 9服务器上。我有相当基本的Unix知识。

它成功执行(Tomcat启动正常)但在Tomcat进程被终止之前永远不会返回。我想其他类似的脚本会有相同的行为。

示例ant任务(命令与我在Jenkins中的命令相同“在远程主机上执行shell脚本”构建任务)

<?xml version="1.0" encoding="UTF-8"?>
<project name="remote-tomcat-controls" basedir=".">
    <property name="hostname">someserver</property>
    <property name="username">someuser</property>
    <property name="password">somepassword</property>
    <property name="port">22</property>
    <property name="tomcathome">~/tomcat</property>
    <target name="start-tomcat">
        <sshexec   host="${hostname}" port="${port}" username="${username}" 
            password="${password}" trust="true"  
            command=". ~/.profile; cd ${tomcathome}/bin; ./startup.sh" />
    </target>
</project>

这会成功启动Tomcat,但除非/直到Tomcat进程在服务器上被终止,否则任务永远不会返回:

start-tomcat:
  [sshexec] Connecting to someserver:22
  [sshexec] cmd : . ~/.profile; cd ~/tomcat/bin; ./startup.sh

涉及3个命令:

  • 导入用户个人资料,以便Java在路径中
  • 更改为tomcat bin目录,以便日志文件的相对路径正常工作
  • 启动Tomcat

我已经尝试将这些命令移动到服务器上的新脚本中,让Ant任务简单地调用它,结果相同。

我试过用nohup预先加上命令,以&amp;结尾,没有运气。

在交互式ssh会话期间运行startup.sh脚本时获得的结果:

$ ./startup.sh
Using CATALINA_BASE:   /home/ebiztest/tomcat-datasheets
Using CATALINA_HOME:   /home/ebiztest/tomcat-datasheets
Using CATALINA_TMPDIR: /home/ebiztest/tomcat-datasheets/temp
Using JRE_HOME:        /home/ebiztest/jdk1.6.0_34
Using CLASSPATH:       /home/ebiztest/tomcat-datasheets/bin/bootstrap.jar:/home/ebiztest/tomcat-datasheets/bin/tomcat-juli.jar
$

立即返回控制权。

有什么想法吗?谢谢!

回应'aa vv'的回答 使用commandResource而不是command让我指向包含要运行的命令的本地文件(添加了更多用于演示的命令):

pwd
. ~/.profile;java -version
pwd
java -version
pwd
cd ~/tomcat-datasheets/bin;pwd
pwd
 ./startup.sh

输出:

start-tomcat:
  [sshexec] Connecting to servername:22
  [sshexec] cmd : pwd
  [sshexec] /home/ebiztest
  [sshexec] cmd : . ~/.profile;java -version
  [sshexec] java version "1.6.0_34"
  [sshexec]
  [sshexec] Java(TM) SE Runtime Environment (build 1.6.0_34-b04)
  [sshexec]
  [sshexec] Java HotSpot(TM) Server VM (build 20.9-b04, mixed mode)
  [sshexec]
  [sshexec] cmd : pwd
  [sshexec] /home/ebiztest
  [sshexec] cmd : java -version
  [sshexec] java version "1.4.2_04"
  [sshexec]
  [sshexec] Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
  [sshexec] Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)
  [sshexec]
  [sshexec] cmd : pwd
  [sshexec] /home/ebiztest
  [sshexec] cmd : cd ~/tomcat-datasheets/bin;pwd
  [sshexec] /home/ebiztest/tomcat-datasheets/bin
  [sshexec] cmd : pwd
  [sshexec] /home/ebiztest
  [sshexec] cmd :  ./startup.sh
  [sshexec] ksh: ./startup.sh:  not found

似乎在单独的行上的命令完全独立地运行,在同一行上只有分号分隔的命令按顺序执行。

2 个答案:

答案 0 :(得分:1)

看起来与'command'选项一样,您执行了一个命令/命令集(2种情况:或者;不支持分离命令来运行单个命令行或不支持脚本调用)。

<sshexec   host="${hostname}" port="${port}" username="${username}" 
            password="${password}" trust="true"  
            commandResource="wrapper_script" outputproperty="wrapper.output.prop"/>


 <echo message="${wrapper.output.prop}"/>

而不是command使用蚂蚁手册http://ant.apache.org/manual/Tasks/sshexec.html中指定的commandResource来查看是否有帮助。

wrapper_script

. ~/.profile
cd ${tomcathome}/bin
./startup.sh

答案 1 :(得分:0)

尝试将命令链接起来:

command=". ~/.profile &amp;&amp; cd ${tomcathome}/bin &amp;&amp; ./startup.sh"
相关问题