2012-10-05 40 views
0

我能夠以兩種方式運行遠程腳本。 優先(間接) #ssh 二(SSH連接之後) #ssh # #exit(回主機終端)運行遠程Linux腳本,就好像我在遠程機器上一樣

我認爲有在型溝道轉發一些差異。 換句話說,當我使用第一種方式運行遠程腳本時,腳本的輸出應該不是主機mashine而是遠程第二種方式。

我有兩臺機器uturksat1和uturksat2 在uturksat2中,我有一個Linux腳本(/tmp/runScript.sh)和Java類Provider。 Linux腳本運行Provider java應用程序,它打開一個套接字然後監聽它。

#!/bin/bash 
echo "Provider" 
$JAVA_HOME/bin/java -cp /tmp Provider& 
$JAVA_HOME/bin/java -version 
rm /tmp/pid 
echo "$!"> /tmp/pid 
echo "Provider-finish" 
exit 0 

在uturksat1機,我有類型以下命令

[email protected]:/tmp# ssh uturksat2 /tmp/runScript.sh 
Provider 
java version "1.6.0_29" 
Java(TM) SE Runtime Environment (build 1.6.0_29-b11) 
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing) 
Provider-finish 
Waiting for connection 

它不會自動返回命令提示,我必須按CTRL + C以返回

當我有鍵入以下命令:

[email protected]:/tmp# ssh -t uturksat2 /tmp/runScript.sh 
Provider 
Waiting for connection 
java version "1.6.0_29" 
Java(TM) SE Runtime Environment (build 1.6.0_29-b11) 
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing) 
Provider-finish 
Connection to uturksat2 closed. 
[email protected]:/tmp# 

Provider應用程序未運行,我可以通過telnet測試它到端口200 4供應商正在收聽。

telnet uturksat2 2004 

最後最後一個問題是,供應商使用log4j,以保持其internall日誌,在遠程Linux腳本執行的第一種方式,則不會創建log4j的LOF文件,但在第二個方法是創建。

+0

請詳細解釋您嘗試的命令,輸出結果以及所需的輸出。 'ssh remotehost prog arg'在'remotehost'上運行,''prog'在'arg'上運行,但在本地重定向遠程stdout&stderr。閱讀http://support.suso.com/supki/SSH_Tutorial_for_Linux或其他關於'ssh'的文檔;你可能想要運行'ssh -v' ...來了解發生了什麼 –

回答

2

這兩個命令之間的唯一差別:

ssh second 
script 
exit 

ssh second script 

的是,在第二種情況下,腳本將被無終端啓動。要強制終端在第二種情況下,你必須指定-t

ssh -t second script 

Update.1

如果你想在後臺啓動的script並留下ssh會議:

ssh second 'nohup script </dev/null> nohup.out 2>&1 &' 
+0

我已經測試過它,但它不起作用。我已經更新了我的問題給出了詳細的解釋 –

+0

所有的作品都應該如此。最後你想得到哪個結果? –

+0

正如我所解釋的那樣。它不是我想要的。我想在遠程主機上運行一個應用程序,與我手動連接遠程機器沒有任何區別。 –

相關問題