Keepalived运行中的bash脚本退出代码问题

时间:2019-02-24 17:53:18

标签: bash

我正在运行 keepalived 来平衡虚拟IP。

我写了一个简单的脚本检查,是否设置了变量,如果设置了“绕过” 节点并故障转移到“备份”节点。它以正确的变量告诉我。

但是, keepalived显然没有看到退出代码。我哪里出问题了?该脚本正在keepalived.conf文件中运行-是的,它被设置为可执行文件。如果我“破坏”代码(出现语法错误),则代码将相应失败。

#!/bin/bash
set -e
echo "$vrrpTVIPS"; #for testing purposes only

if [ "$vrrpTVIPS" != "bypass" ]; then
 exit 0
else
 exit 1
fi

应该发生的是,如果vrrpTVIPS == bypass,此脚本应以代码1退出(当我自己运行它并检查echo $?我得到1时,该脚本便会退出)。为什么keepalived脚本看不到并采取相应措施(它记录了脚本退出代码,并且没有退出状态1的任何条目)?

我也尝试过反转,但无济于事:

#!/bin/bash
set -e
echo "$vrrpTVIPS";

if [ "$vrrpTVIPS" == "bypass" ]; then
 exit 1
else
 exit 0
fi

添加的信息: 这是keepalived.conf/etc/keepalived/keepalived.conf的相关信息:

vrrp_script check_test_override {
        script "/usr/sbin/chktest.sh"
        internal 2
}

,然后在文件的V-Instance配置内部:

track_script {
check_test_override
}

1 个答案:

答案 0 :(得分:0)

vrrp_script接受rise和/或fall参数,以及weight设置OK / KO转换需要多少错误或成功,以及根据此更改给予多少优先级。

我相信默认情况下它们都是未定义的,因此您必须明确定义它们。例如,要打开一个正常/失败退出代码,请设置:

vrrp_script check_test_override {
        script "/usr/sbin/chktest.sh"
        interval 2
        weight 2
        rise 1
        fall 1
}