我有2个应用程序服务器,都配置为运行php cron作业,但只有1个可以在任何时候运行作业。因为我已经将keepalived用于其他目的,所以我在考虑在cron作业中使用一些逻辑来检查节点是否具有虚拟ip,然后执行作业。因此,从理论上讲,即使两台服务器同时运行cron作业,也只有一台服务器会执行“真正的”作业。
但我的问题是如何检查节点是否有vip?有人能在这方面给我一些建议吗?
谢谢。
发布于 2014-02-15 05:43:27
我不得不这么做。如果你只是想检查你所在的盒子是否浮动了公网ip,并且ip是,比如说a.b.c.d,那么运行一下就足够了:
ip a | grep a.b.c.d我非常确定,在bash中,您可以将该命令的输出用作条件本身。如果机器没有浮动公共ip,则输出应为空,因此计算结果为false,如果ip匹配,则输出结果应为true。
发布于 2019-03-20 05:24:15
以下是我建议调用is_primary来执行此操作的通用脚本:
#!/bin/bash
#
# Tells you if this node is the primary or secondary with keepalived
conf=/etc/keepalived/keepalived.conf
# Not sure why I can't do this in 1 step, but this works:
vip=$(expr "$(cat $conf)" : '.*\bvirtual_ipaddress\s*{\s*\(.*\)/*}')
vip=`expr "$vip" : '\([^ ]*\)' | sed 's/\./\\\\./g'`
if ip addr | grep -q "$vip"
then echo Primary ; exit 0
else echo Secondary ; exit 1
fihttps://stackoverflow.com/questions/18394496
复制相似问题