tomcat - 调用 Tomcat startup.sh 时 Ant SSHExec 任务不返回

标签 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 并以 & 结尾,也没成功。

在交互式 ssh session 期间运行 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

似乎不同行上的命令彼此完全分开运行,只有同一行上以分号分隔的命令按顺序执行。

最佳答案

它看起来像使用 '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}"/>

使用 ant 手册中指定的 commandResource 代替 command:http://ant.apache.org/manual/Tasks/sshexec.html看看是否有帮助。

包装脚本

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

关于tomcat - 调用 Tomcat startup.sh 时 Ant SSHExec 任务不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21071593/

相关文章:

java - 找不到外部 gradle 插件 'com.bmuschko.tomcat'

java - Vaadin + Tomcat webapp 可以用来连续运行一个线程吗?

apache - 将 IIS 网站重定向到 Apache 网站

java - Java 类路径汇编如何工作?

ant - scp ant 从远程复制到本地并使用排除

ant - xmlproperty 并在存在/设置特定属性时检索 xml 元素的属性值

java - 带有 Servlet 3.0 的嵌入式 Tomcat - 扫描时如何跳过某些 jar?

jsp - Tomcat 5.5 和 JSTL 1.2 上的 ELException

java - 从批处理文件中调用 ant

ant - 从包含/导入的项目中检索属性值