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 -f
或ptree $$
命令。您会看到安装脚本生成的一个或多个子进程。
要阻止 SSH 命令挂起,您需要从终端 input/output 中分离此类子进程。您可以将脚本的输出重定向到文件 - stdout
和 stderr
都使用 > /some/output/file 2>&1
, 也 使用 < /dev/null
重定向其输入.
或者您可以使用 nohup
命令。
正如其他人所指出的,您没有提供 MCVE,但这可能是安装脚本中的问题命令,因为您的问题暗示您看到了安装脚本的预期输出:
./tctl start test
您最好将其替换为:
./tctl start test </dev/null >/some/log/file/path.log 2>&1
以下 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 -f
或ptree $$
命令。您会看到安装脚本生成的一个或多个子进程。
要阻止 SSH 命令挂起,您需要从终端 input/output 中分离此类子进程。您可以将脚本的输出重定向到文件 - stdout
和 stderr
都使用 > /some/output/file 2>&1
, 也 使用 < /dev/null
重定向其输入.
或者您可以使用 nohup
命令。
正如其他人所指出的,您没有提供 MCVE,但这可能是安装脚本中的问题命令,因为您的问题暗示您看到了安装脚本的预期输出:
./tctl start test
您最好将其替换为:
./tctl start test </dev/null >/some/log/file/path.log 2>&1