【发布时间】:2012-09-26 08:32:12
【问题描述】:
我可以通过两种方式运行远程脚本。 第一(间接) #ssh 二(ssh连接后) #ssh # #exit(返回主机终端)
我认为频道转发的类型有所不同。 换句话说,当我使用第一种方式运行远程脚本时,脚本的输出应该不是主机 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 机器上,我输入以下命令
root@UTURKSAT1:/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 才能返回
当我输入以下命令时:
root@UTURKSAT1:/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.
root@UTURKSAT1:/tmp#
Provider 应用程序没有运行,我可以通过 telnet 到 Provider 正在监听的端口 2004 测试它。
telnet uturksat2 2004
最后一个问题是Provider使用log4j来保存它的internall log,在远程linux脚本执行的第一种方式中,log4j lof文件没有被创建,而第二种方式是创建的。
【问题讨论】:
-
请准确解释您尝试过的命令、您得到的输出以及想要的输出。
ssh remotehost prog arg运行在remotehost̀prog和arg上,但在本地重定向远程 stdout 和 stderr。阅读support.suso.com/supki/SSH_Tutorial_for_Linux 或其他一些关于ssh的文档;你可能想运行ssh -v...了解正在发生的事情
标签: linux