像远程计算机一样运行远程Linux脚本

时间:2012-10-05 07:55:05

标签: linux

我能够以两种方式运行远程脚本。 第一(间接)  #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#

提供商应用程序未运行,我可以通过telnet测试它到提供商正在侦听的端口2004。

telnet  uturksat2 2004

最后一个问题是提供者使用log4j来保持其内部日志,在远程linux脚本执行的第一种方式中,没有创建log4j lof文件,但是以第二种方式创建它。

2 个答案:

答案 0 :(得分: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 &'

答案 1 :(得分:0)

我用不同的解释打开了同样的问题。它已经解决了。谢谢你的建议让我的动力很高。这是您已经知道的解决方案。 Run remote java server in linux script