从我的(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个命令:
我已经尝试将这些命令移动到服务器上的新脚本中,让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
似乎在单独的行上的命令完全独立地运行,在同一行上只有分号分隔的命令按顺序执行。
答案 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 && cd ${tomcathome}/bin && ./startup.sh"