我认为我想做的事情有点复杂,但我喜欢任何帮助或建议:
我有一个bash数组$ {IP_ADDRESSES [@]},其中包含(如您所猜)的IP地址。该阵列每10分钟通过cron更新一次。
我需要做的是,动态地'将这些IP地址注入apache配置文件(/etc/httpd/conf.d/balancer.conf)。我试图修改的行的语法是:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://<<ip-address>>:80 route=X
然而,这是它变得棘手的地方。我有以下要求:
例如:
有一个没有平衡器成员的配置文件。此时,我们感兴趣的配置文件部分如下所示:
<Proxy balancer://cluster01)cluster>
脚本识别出没有成员,并查看$ {IP_ADDRESSES [@]}并看到它包含3个IP地址。对于第一个条目,在&#39;&#39;它插入第一行。它现在看起来像这样:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.1:80 route=0
接下来,它找到了第二个和第三个:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.1:80 route=0
BalancerMember ajp://1.1.1.2:80 route=1
BalancerMember ajp://1.1.1.3:80 route=2
此时一切都很好。我有一个配置文件,可以使用3个IP地址。真棒。但是下一次运行cron作业会发生什么?有一些事情可能发生:
a)没有任何变化,IP地址相同,没有修改配置文件 b)一个或多个IP地址已更改。我想比较数组中的IP地址和配置文件中的IP地址并替换它。 c)阵列中有更多或更少的IP地址。如果它小于配置文件中的,则删除配置文件中不在阵列中的任何条目。如果还有更多,请添加数组中的任何IP地址
例如
配置文件一切正常,数组中的IP地址反映了配置文件中的内容。它看起来像这样:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.1:80 route=0
BalancerMember ajp://1.1.1.2:80 route=1
BalancerMember ajp://1.1.1.3:80 route=2
但是,我们从数组中丢失了1.1.1.2。它已被1.1.1.4取代。配置文件现在应如下所示:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.1:80 route=0
BalancerMember ajp://1.1.1.4:80 route=1
BalancerMember ajp://1.1.1.3:80 route=2
OR,比如1.1.1.4是一个额外的IP地址,现在该数组包含4个元素;将它添加到最后:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.1:80 route=0
BalancerMember ajp://1.1.1.2:80 route=1
BalancerMember ajp://1.1.1.3:80 route=2
BalancerMember ajp://1.1.1.4:80 route=3
等
或者,如果我们从阵列中丢失了2个IP地址(1.1.1.1和1.1.1.2),配置文件应如下所示:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.3:80 route=0
所以最后我只是尝试使用数组中的IP地址保持配置文件最新。
非常感谢任何和所有帮助。
干杯!!
答案 0 :(得分:0)
在更新数组添加内容的脚本中
1)要通过检查md5sum echo ${array[*]} | md5sum
来检查数组是否更新,您可以将其保存在临时文件中以供后续比较。
2)准备一个文件,其语法在每次更新数组时都会更改:
for i in $(seq 0 $((${#klp[@]} - 1)))
do
echo "BalancerMember ajp ://${array[ $i ]}:80 route=$i" >> tmpFile
done
3)删除将使用existingFile
中的tmpFile内容填充的现有行 sed -i '/BalancerMember ajp:\/\/.*=[0-9]/d' <exitingFile>
4)将文件tmpFile的内容(在正确的位置)附加到exitingFile
sed -i'.bck' '/yourPattern/ r tmpFile' <exitingFile>
现在您的existingFile(这是您的conf文件)已更新IP
请注意:
yourPattern 是在原始配置文件中以BalancerMember开头的行之前的模式匹配行。
exitingFile 是您现有的配置文件。
并且最后一个sed语句将创建一个带有.bck
扩展名的备份文件,你犯了一些错误。
您还可以在新脚本中实施此解决方案,以防您不想更改现有解决方案。您只需要更新的数组值,如果您在同一个脚本中执行此操作,只需检查数组是否更新就很容易。