ssh 即使在执行后也不会 return

ssh does not return even after execution

以下 ssh 命令不会 return 到终端。尽管执行已完成,但它挂起。执行在 echo hi 命令后挂起。

ssh user@testserver "echo hello;source .profile;source .bash_profile;/apps/myapp/deploytools/ciInstallAndRun.sh; echo hi"

输出

hello
<outoutfrom remote script"
hi

ciInstallAndRun.sh

echo 'starting'
cd /apps/myapp/current
./tctl kill
cd /apps/myapp

mv myapp_v1.0 "myapp_v1.0_`date '+%Y%m%d%H%M'`"
unzip -o /apps/myapp/myappdist-bin.zip
java -classpath .:/apps/myapp/deploytools/cleanup.jar se.telenor.project.cleanup.Cleanup /apps/myapp myapp_v1.0_ 3
cd /apps/myapp/myapp_v1.0
echo 'Done with deploy'
chmod -R 775 *
echo 'Done'

./tctl start test 

来源OS:Redhat 目标 Os:Solaris 10 8/07

任何解决此问题的想法。

任何解决此问题的想法。

您的安装脚本生成了一个子进程。

echo hi之前添加ps -fptree $$命令。您会看到安装脚本生成的一个或多个子进程。

要阻止 SSH 命令挂起,您需要从终端 input/output 中分离此类子进程。您可以将脚本的输出重定向到文件 - stdoutstderr 都使用 > /some/output/file 2>&1 使用 < /dev/null 重定向其输入.

或者您可以使用 nohup 命令。

正如其他人所指出的,您没有提供 MCVE,但这可能是安装脚本中的问题命令,因为您的问题暗示您看到了安装脚本的预期输出:

./tctl start test 

您最好将其替换为:

./tctl start test </dev/null >/some/log/file/path.log 2>&1