0

我可以通过两种方式运行远程脚本。第一个(间接)#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文件没有被创建,但是第二种方式是创建的。

4

2 回答 2

2

这两个命令之间的唯一区别:

ssh second
script
exit

ssh second script

是在第二种情况下,脚本将在没有终端的情况下启动。要在第二种情况下强制终端,您必须指定-t

ssh -t second script

更新.1

如果您想script在后台启动并离开ssh会话:

ssh second 'nohup script < /dev/null > nohup.out 2>&1 &'
于 2012-10-05T08:00:08.353 回答
0

我用不同的解释打开了同样的问题。已经解决了。感谢您的建议,使我保持高动力。这是您已经知道的解决方案。 在 linux 脚本中运行远程 java 服务器

于 2012-10-07T21:38:38.700 回答