1

我有一个用 Java 实现的名为 Provider 的服务器,以及启动它的 linux 脚本。

#!/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

当我想在不同的机器(machine2)上执行以下脚本时

root@machine1:/tmp# ssh  machine2/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

问题是,运行上面的脚本后,它没有返回控制台,虽然 Provider 启动了,但它挂断了。

我已经分析了类似的概念,例如 Glassfish 域开始。通过执行

ssh machine2 asadmin start-domain

它返回控制台没有任何问题,所以我可以获得执行状态“$?”

4

1 回答 1

2

我认为问题在于远程sshd不会关闭 ssh 会话,因为后台仍有一个 java 进程在运行,可能会尝试写入输出。

尝试将后台进程stdout和stderr重定向到“/dev/null”;例如

$JAVA_HOME/bin/java -cp /tmp Provider > /dev/null 2>&1 &
于 2012-10-07T11:21:01.383 回答