【问题标题】:Run Remote Linux Script as if I am at remote machine像在远程机器上一样运行远程 Linux 脚本
【发布时间】: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 ̀progarg 上,但在本地重定向远程 stdout 和 stderr。阅读support.suso.com/supki/SSH_Tutorial_for_Linux 或其他一些关于ssh 的文档;你可能想运行ssh -v ...了解正在发生的事情

标签: linux


【解决方案1】:

这两个命令的唯一区别:

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 &'

【讨论】:

  • 我已经测试过了,但它不起作用。我已经更新了我的问题,给出了详细的解释。
  • 一切正常。最后你想得到哪个结果?
  • 正如我解释的那样。它不是我想要的。我想运行安装在远程主机上的应用程序,与手动连接远程计算机没有任何区别。
  • ssh uturksat2 'nohup /tmp/runScript.sh&' 它也一直在等待。不要自动返回控制台。
  • 其实我并不想通过加&来发送linux进程bakground。我想跟踪执行步骤然后知道执行的成功状态。就是这样,因为我有另一个调用“ssh 主机脚本”而不是等待结果的 java 程序。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多