2012-10-05 117 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

正如我所解释的那样。它不是我想要的。我想在远程主机上运行一个应用程序,与我手动连接远程机器没有任何区别。 –

相关问题