View difference between Paste ID: wyKu0pww and K22Dajhp
SHOW: | | - or go back to the newest paste.
1
#!/bin/sh
2-
# version: 2.0.0, 25-sep-2021, by eibgrad
2+
#DEBUG= # uncomment/comment to enable/disable debug mode
3-
# href: https://tinyurl.com/5bfk5at3
3+
4
#          name: merlin-ovpn-client-watchdog.sh
5
#       version: 3.0.1, 05-aug-2022, by eibgrad
6-
SCRIPT="$SCRIPTS_DIR/services-start"
6+
#       purpose: restart failed/stopped/unresponsive openvpn clients
7
#       type(s): services-start
8
#          href: https://tinyurl.com/2p9a68ne
9
#  installation:
10
#    1. enable jffs custom scripts and configs (administration->system)
11-
cat << "EOF" > $SCRIPT
11+
#    2. ssh to router and copy/paste the following command:
12
#         curl -kLs bit.ly/merlin-installer|tr -d '\r'|sh -s wyKu0pww
13-
set -x # uncomment/comment to enable/disable debug mode
13+
#    3. modify script w/ your preferred options using nano editor:
14-
(
14+
#         nano /jffs/scripts/merlin-ovpn-client-watchdog.sh
15
#    4. reboot
16
17
SCRIPTS_DIR='/jffs/scripts'
18
SCRIPT1="$SCRIPTS_DIR/merlin-ovpn-client-watchdog.sh"
19
SCRIPT2="$SCRIPTS_DIR/services-start"
20
21
mkdir -p $SCRIPTS_DIR
22
23
# -------------------- begin merlin-ovpn-client-watchdog --------------------- #
24
cat << 'EOF' > $SCRIPT1
25
#!/bin/sh
26
#set -x # comment/uncomment to disable/enable debug mode
27
{
28
# ------------------------------ BEGIN OPTIONS ------------------------------- #
29
30
# time (in secs) between checks for failed/stopped/unresponsive openvpn clients
31
INTERVAL=60
32
33-
WAN_IF="$(nvram get wan0_ifname)"
33+
34
PING_HOST='8.8.8.8'
35
36
# time (in secs) between ping checks
37
PING_INTERVAL=10
38
39
# maxmium number of ping checks before being considered a failure
40
PING_MAXTRY=3 # (3 recommended, 0 disables ping checks)
41
42
# ------------------------------- END OPTIONS -------------------------------- #
43-
        ping -qc1 -w3 -I $1 $PING_HOST &>/dev/null && return 0
43+
44
# ---------------------- DO NOT CHANGE BELOW THIS LINE ----------------------- #
45
46
# function _ping( vpn-network-interface )
47
_ping() {
48
    [ $PING_MAXTRY -gt 0 ] || return 0
49
50
    local i=1
51-
while ! ping -qc1 -w3 -I $WAN_IF $PING_HOST &>/dev/null; do sleep 10; done
51+
52
    # it's best to check multiple times to prevent false negatives
53
    while :; do
54
        ping -qc1 -W3 -I $1 $PING_HOST &>/dev/null && return 0
55
        [ $(( i++ )) -ge $PING_MAXTRY ] && break || sleep $PING_INTERVAL
56
    done
57
58
    return 1
59
}
60
61
# wait for *reliable* internet connection
62-
        service restart_vpnclient${i}
62+
until ping -qc1 -W3 $PING_HOST &>/dev/null; do sleep 10; done
63
64
while sleep $INTERVAL; do
65
    for i in 1 2 3 4 5; do
66
        # only enabled openvpn clients need to be considered
67-
) 2>&1 | logger -t $(basename $0)[$$] &
67+
68
69-
chmod +x $SCRIPT
69+
70
        pidof vpnclient${i} &>/dev/null && _ping tun1${i} && continue
71
72-
if [ -f $SCRIPT ]; then
72+
73-
    echo "error: $SCRIPT already exists; requires manual installation"
73+
        service restart_vpnclient${i} >/dev/null
74
        echo "openvpn client #$i (re)started @ $(date)"
75
    done
76-
    echo 'Done.'
76+
77-
fi
77+
78
} 2>&1 | logger -t $(basename $0 .sh)[$$]
79
EOF
80
[ ${DEBUG+x} ] && sed -ri '2 s/^#(set -x)/\1/' $SCRIPT1
81
chmod +x $SCRIPT1
82
echo "installed: $SCRIPT1"
83
# --------------------- end merlin-ovpn-client-watchdog ---------------------- #
84
85
# --------------------------- begin services-start --------------------------- #
86
create_script() {
87
cat << 'EOF' > $SCRIPT2
88
#!/bin/sh
89
#set -x # comment/uncomment to disable/enable debug mode
90
{
91
nohup $SCRIPT1 &>/dev/null &
92
} 2>&1 | logger -t $(basename $0)[$$]
93
EOF
94
[ ${DEBUG+x} ] && sed -ri '2 s/^#(set -x)/\1/' $SCRIPT2
95
sed "s:\$SCRIPT1:$SCRIPT1:g" -i $SCRIPT2
96
chmod +x $SCRIPT2
97
}
98
99
if [ -f $SCRIPT2 ]; then
100
    echo "error: $SCRIPT2 already exists; requires manual installation"
101
else
102
    create_script
103
    echo "installed: $SCRIPT2"
104
fi
105
# ---------------------------- end services-start ---------------------------- #