在HA配置中,我定期检查eth0上的VIP地址,(我们称之为2.2.2.2)。如果它已启动,那么我需要在/ etc / network / interfaces配置文件中调出为eth0定义的另一组IP地址:
up ip addr add **1.2.3.34** dev $IFACE
up ip addr add **1.2.3.40** dev $IFACE
up ip addr add **1.2.3.48** dev $IFACE
并将每个IP仅传递给另一组命令:
ip a a **1.2.3.34/32** dev eth0
ip a a **1.2.3.40/32** dev eth0
ip a a **1.2.3.48/32** dev eth0
到目前为止我所做的是:
#!/bin/bash
STATUS=$(ip a s eth0 | grep inet | awk '{print $2}' | sed 's/addr://')
if ip a s eth0 | grep inet | awk '{print $2}' | sed 's/addr://' | grep 2.2.2.2/27 ; then
cat /etc/network/interfaces | grep -o "up ip addr add [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" > /tmp/ext_ip.txt
现在我需要帮助如何将每一行传递给上面提到的另一个命令(ip a a 1.2.3 ...),但不知道如何正确地执行此操作。
如果系统中没有VIP,我可以选择还原操作 - 如果主HA主机将脱机。
答案 0 :(得分:0)
实现此目的的一种方法是将所有IP地址解析为一个数组,并使用for
循环将它们分配给接口:
#!/bin/bash
IFACE='eth0'
VIP='192.168.0.1'
IFACES_FILE='/etc/network/interfaces'
STATUS=$( ip address show "$IFACE" | grep -o "$VIP" )
if [ ! -z "$STATUS" ]; then
ip_addresses=( $( grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' "$IFACES_FILE" ) )
for ip in "${ip_addresses[@]}"; do
ip address add "$ip" dev "$IFACE"
done
fi
这是一个简化的例子。您可能希望添加更多检查,添加一些日志消息以提供对调试有用的输出。此外,根据您的服务器配置,如果没有sudo
,某些命令可能无法运行。
答案 1 :(得分:0)
谢谢Andrii L.我已将您的解决方案改进为:
$(document).ready(function() {
var calendar = $('#calendar').fullCalendar({
defaultView: 'agendaWeek',
events: {
url: 'json-events-feed.php',
type: 'POST', // Send post data
error: function() {
alert('There was an error while fetching events.');
}
}
});
});
否则它会尝试添加/ etc / network / interfaces文件中的所有IP和广播。