#!/bin/sh /etc/rc.common START=99 USE_PROCD=1 PROG="/usr/bin/keepalived-rsync-inotify" KEEPALIVED_USER=keepalived KEEPALIVED_HOME=$(awk -F: "/^$KEEPALIVED_USER/{print \$6}" /etc/passwd) start_instance() { local cfg=$1 local vrrp_instance=$2 local peer=$3 config_get name $cfg name [ -z "$name" ] && return [ "$name" != "$peer" ] && return config_get sync $cfg sync 0 [ "$sync" = "0" ] && return config_get sync_mode $cfg sync_mode [ "$sync_mode" != "receive" ] && return config_get sync_dir $cfg sync_dir $KEEPALIVED_HOME [ -z "$sync_dir" ] && return [ ! -d "$sync_dir" ] && mkdir -m 755 -p "$sync_dir" procd_open_instance "$name" procd_set_param command /bin/sh "$PROG" "$vrrp_instance" "$name" "$sync_dir" procd_set_param pidfile /var/run/keepalived-inotify-$name.pid procd_close_instance } process_unicast_peer() { local peer=$1 local vrrp_instance=$2 config_foreach start_instance peer "$vrrp_instance" "$peer" } process_vrrp_instance() { local cfg=$1 local peer_instance=$2 local name unicast_peer config_get name $cfg name config_get unicast_peer $cfg unicast_peer if [ -n "$peer_instance" ]; then list_contains unicast_peer "$peer_instance" || return process_unicast_peer "$peer_instance" "$name" else config_list_foreach $cfg unicast_peer process_unicast_peer "$name" fi } start_service() { local peer_instance=$1 config_load keepalived config_foreach process_vrrp_instance vrrp_instance "$peer_instance" }