從我的(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
似乎在單獨的行命令從海誓山盟完全單獨運行,僅在同一行分號分隔的命令按順序執行。
腳本似乎在真空運行的每個命令。在主文章中查看我的編輯。 – Dan
由於其打印'ksh:./startup.sh:not found',您的腳本是否存在於相同的工作目錄中並且是unix兼容格式?只要嘗試添加:'ls -l startup.sh; dos2unix startup.sh'執行前 – 2014-01-15 10:49:59
startup.sh在putty中運行時運行正常,並且在命令鏈接在一起時運行正常。 這裏的問題是,「cd」命令改變目錄,但下一個命令似乎開始一個新的會話或東西......它不再在「cd」命令改變到的目錄中。 – Dan