我能够以两种方式运行远程脚本。 第一(间接) #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文件,但是以第二种方式创建它。
答案 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