我想确定我的4个节点群集上哪个节点处于活动状态。 我还想将当前活动节点的名称添加到脚本中。
这是我的代码:
#!/bin/bash
dev1=10.1.1.1
dev2=10.1.1.2
dev3=10.1.1.3
dev4=10.1.1.4
/usr/bin/ssh -x root@${dev1} $'command | grep -Eo "active"'
/usr/bin/ssh -x root@${dev2} $'command | grep -Eo "active"'
/usr/bin/ssh -x root@${dev3} $'command | grep -Eo "active"'
/usr/bin/ssh -x root@${dev4} $'command | grep -Eo "active"'
因此,我想以这种形式获取此变量(我想在脚本的其他部分中使用它):
active=$dev2
她是我当前的输出:
sh -x s.sh
+ dev1=10.1.1.1
+ dev2=10.1.1.2
+ dev3=10.1.1.3
+ dev4=10.1.1.4
+ /usr/bin/ssh -x root@10.1.1.1 'command | grep -Eo "active"'
+ /usr/bin/ssh -x root@10.1.1.2 'command | grep -Eo "active"'
+ /usr/bin/ssh -x root@10.1.1.3 'command | grep -Eo "active"'
active
+ /usr/bin/ssh -x root@10.1.1.4 'command | grep -Eo "active"
答案 0 :(得分:0)
假设通常只有一台活动主机,但是仍然可以防范极端情况,则可以这样编写:
#!/bin/bash
declare -a dev # hold hosts in indexed array
declare -i numActive=0 # hold number of active hosts in integer variable
declare -i lastActive= # last active host while iterating
dev[1]=10.1.1.1
dev[2]=10.1.1.2
dev[3]=10.1.1.3
dev[4]=10.1.1.4
for(( i=1 ; i<=${#dev[@]} ; i++ )) ; do
# execute command on that host:
output=$( /usr/bin/ssh -x "root@${dev[$i]}" 'command' )
# if the host is active, remember its index and
# increase the count of active hosts:
if grep -qEo "active" <<< "$output" ; then
lastActive="$i"
numActive=$(( numActive + 1 ))
fi
done
# depending on number of active hosts, print
# "none", "multiple" or the active host's ip:
if [ "$numActive" -eq 0 ] ; then
active="none"
elif [ "$numActive" -gt 1 ] ; then
active="multiple"
else
active=${dev[$lastActive]}
fi
echo "$active"
请注意,我将grep
移到了客户端。如果command
产生大量输出,这可能是个坏主意。