gpt4 book ai didi

linux - shell 脚本、for 循环、ssh 和别名

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:00 24 4
gpt4 key购买 nike

我正在尝试做这样的事情,我需要从 4 个 Blade 中获取备份,并且所有都应该存储在 /home/backup/esa 位置下,其中包含 4带有节点名称的目录(如 sc-1、sc-2、pl-1、pl-2)。每个目录应包含相应节点的备份信息。

但是我看到“我从哪个节点执行命令,只有那个数据被复制到所有 4 个目录”。知道为什么会这样吗?我的脚本是这样的:

for node in $(grep "^node" /cluster/etc/cluster.conf | awk '{print $4}');
do echo "Creating backup fornode ${node}";
ssh $node source /etc/profile.d/bkUp.sh;
asBackup -b /home/backup/esa/${node};
done

最佳答案

你的问题是这段代码:

ssh $node source /etc/profile.d/bkUp.sh;
asBackup -b /home/backup/esa/${node};

确实如此:

  1. $node 上创建一个远程 shell>
  2. 在远程shell中执行命令source/etc/profile.d/bkUp.sh
  3. 关闭远程 shell 并忘记在该 shell 中所做的任何事情!!
  4. 在本地主机上运行 asBackup

这不是你想要的。将其更改为:

ssh "$node" "source /etc/profile.d/bkUp.sh; asBackup -b '/home/backup/esa/${node}'"

这样做:

  1. $node 上创建一个远程 shell>
  2. 执行命令source/etc/profile.d/bkUp.sh; asBackup -b '/home/backup/esa/${node}'远程主机上

确保 /home/backup/esa/${node} 是 NFS 挂载(否则,文件只会备份到远程 主机)。

请注意,/etc/profile 是备份脚本(或其配置)的一个非常糟糕的地方。考虑将设置/配置移动到 /home/backup/esa,它在集群的所有节点之间共享(或应该共享),因此在一个地方更改它会立即更新到所有地方。

另请注意引号的使用:单引号和双引号确保变量 node 中的空格不会导致意外问题。当然,"$node"中不太可能有空格,但如果有,错误消息会误导您。

所以总是正确引用。

关于linux - shell 脚本、for 循环、ssh 和别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8381938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com