如何在多个远程计算机中运行shell脚本

plupiseo  于 2022-11-30  发布在  Shell
关注(0)|答案(1)|浏览(154)

我尝试使用shell脚本从名为keycloak的服务中导出一些配置,为此,将从管道中运行该脚本,管道需要连接到远程计算机,然后连接到k8s群集并在其中运行命令。一切正常,导出工作正常,但我尝试使用exit退出k8s群集并直接结束shell脚本,否则它将移回管道主机而不停留在远程计算机中。

从管道运行命令

ssh -t ubuntu@example1.com 'bash' < export.sh

导出.sh

#!/bin/bash
set -x
set -e

rm -rf /tmp/realm-export

if [ $(ps -ef | grep "keycloak.migration.action=export" | grep -v grep | wc -l) != 0 ]; then
    echo "Another export is currently running"
    exit 1
fi

kubectl -n keycloak exec -it keycloak-0 bash

mkdir /tmp/export
/opt/jboss/keycloak/bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=/tmp/export -Dkeycloak.migration.usersExportStrategy=DIFFERENT_FILES -Djboss.socket.binding.port-offset=100
rm /tmp/export/master-*
exit
kubectl -n keycloak cp keycloak-0:/tmp/export /tmp/realm-export
exit
exit

scp ubuntu@example1.com:/tmp/realm-export/* ./configuration2/realms/

第一次退出后整个shell脚本停止了它不会停留在www.example.com上ubuntu@example1.com有什么解决办法吗?

yquaqz18

yquaqz181#

使用HEREDOC(EOF)在不使用交互式环境的情况下运行内部命令。

它不是EOF。它是'EOF'。这可以防止变量在当前shell中展开。
但在其他脚本中的/tmp/export/master-*会按您的预期展开。

kubectl -n keycloak exec -it keycloak-0 bash <<'EOF'
<put your codes here, which you type interactively>
EOF

export.sh

#!/bin/bash
set -x
set -e

rm -rf /tmp/realm-export

if [ $(ps -ef | grep "keycloak.migration.action=export" | grep -v grep | wc -l) != 0 ]; then
    echo "Another export is currently running"
    exit 1
fi

# the suggested code.
kubectl -n keycloak exec -it keycloak-0 bash <<'EOF'
<put your codes here, which you type interactively>
EOF

mkdir /tmp/export
/opt/jboss/keycloak/bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=/tmp/export -Dkeycloak.migration.usersExportStrategy=DIFFERENT_FILES -Djboss.socket.binding.port-offset=100
rm /tmp/export/master-*

kubectl -n keycloak cp keycloak-0:/tmp/export /tmp/realm-export

scp ubuntu@example1.com:/tmp/realm-export/* ./configuration2/realms/

无论scp是否成功运行,此代码都将退出。

相关问题