2014-01-12 42 views
1

從我的(Windows)桌面或(Windows或Unix)Jenkins服務器(我相信它使用相同的底層JSch技術),我似乎無法調用正如我想要的Tomcat bin目錄中的startup.sh腳本。 Tomcat(7)位於Solaris 9服務器上。我有相當基本的Unix知識。當調用Tomcat時,Ant SSHExec任務不會返回startup.sh

它成功執行(Tomcat開始正常),但永遠不會返回,直到Tomcat進程被終止。我想其他類似的腳本會有相同的行爲。

例Ant任務(該命令是爲我會把在詹金斯「遠程主機上執行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會話中運行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的回答讓我指向包含的命令來運行(以供演示多個命令)本地文件:

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 

似乎在單獨的行命令從海誓山盟完全單獨運行,僅在同一行分號分隔的命令按順序執行。

回答

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使用commandResource如螞蟻手冊中規定:http://ant.apache.org/manual/Tasks/sshexec.html,看看是否有幫助。

wrapper_script

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

腳本似乎在真空運行的每個命令。在主文章中查看我的編輯。 – Dan

+0

由於其打印'ksh:./startup.sh:not found',您的腳本是否存在於相同的工作目錄中並且是unix兼容格式?只要嘗試添加:'ls -l startup.sh; dos2unix startup.sh'執行前 – 2014-01-15 10:49:59

+0

startup.sh在putty中運行時運行正常,並且在命令鏈接在一起時運行正常。 這裏的問題是,「cd」命令改變目錄,但下一個命令似乎開始一個新的會話或東西......它不再在「cd」命令改變到的目錄中。 – Dan

0

嘗試鏈這樣的命令:

command=". ~/.profile &amp;&amp; cd ${tomcathome}/bin &amp;&amp; ./startup.sh" 
+0

沒有運氣恐怕會得到處理相同「;」 – Dan

相關問題