我正在尝试做这样的事情,我需要从4个刀片进行备份,并且
所有内容都应存储在/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
答案 0 :(得分:1)
您的问题格式有点令人困惑,但看起来好像有引用问题。如果你这样做
ssh $node source /etc/profile.d/bkUp.sh; esaBackup -b /home/backup/esa/${node}
然后在source
上执行命令$node
。命令完成后,远程连接将关闭,包含它的shell将包含/etc/profile.d/bkUp.sh
的结果。现在esaBackup
命令在本地计算机上运行。它不会在`bkUp.sh
您需要做的是在所有希望远程shell运行的命令周围加上引号 - 比如
ssh $node "source /etc/profile.d/bkUp.sh; esaBackup -b /home/backup/esa/${node}"
这将使ssh运行远程节点上的完整命令列表。
答案 1 :(得分:1)
你的问题是这段代码:
ssh $node source /etc/profile.d/bkUp.sh;
asBackup -b /home/backup/esa/${node};
它确实:
$node
source /etc/profile.d/bkUp.sh
asBackup
。这不是你想要的。将其更改为:
ssh "$node" "source /etc/profile.d/bkUp.sh; asBackup -b '/home/backup/esa/${node}'"
这样做:
$node
source /etc/profile.d/bkUp.sh; asBackup -b '/home/backup/esa/${node}'
确保/home/backup/esa/${node}
是NFS安装(否则,文件只会备份在远程主机上的目录中)。
请注意,/etc/profile
是备份脚本(或其配置)的一个非常糟糕的地方。考虑将setup / config移动到集群的所有节点之间(或应该)共享的/home/backup/esa
,因此在一个地方更改它会立即更新它。
还要注意引号的用法:单引号和双引号可确保变量node
中的空格不会导致意外问题。当然,“$ node”中不太可能有空格,但如果有,则错误信息会误导你。
所以总是要正确引用。