gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:20:48 26 4
gpt4 key购买 nike

从我的 (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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com