mirror of
https://github.com/coolsnowwolf/packages.git
synced 2025-05-01 03:12:38 +08:00
66 lines
1.4 KiB
Bash
66 lines
1.4 KiB
Bash
#!/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"
|
|
}
|