我试图让我的openvpn客户端重启,如果它不能每60秒ping一次目标4.2.2.2,如果它什么都不做的话。这就是我所拥有的。我想继续运行。我在Alpine Linux上运行它。非常感谢任何帮助。
#!/bin/sh
#This is a script to continuously do 5 pings to 4.2.2.2
#every 60 seconds to keep the tunnel up if pings fail,
#then it will restart the openvpn process. And record the
#time it failed.
PING=ping -w 5 4.2.2.2
exec &> /var/log/ping_SLA
while true
do
if
#ping returns a fail value
[ $PING -eq 0 ];
sleep 60s
then
#Execute commands
date > /var/log/ping_SLA_Fail
rc-service openvpn stop
killall -9 openvpn
rc-service openvpn start
sleep 30s
else
# colon is a null and is required
:
fi
done
答案 0 :(得分:3)
man ping:
-c count
发送计数ECHO_REQUEST数据包后停止。使用截止时间选项,ping等待计数ECHO_REPLY数据包,直到超时到期。
-s packetsize
指定要发送的数据字节数。默认值为56,当与8字节的ICMP标头数据结合使用时,转换为64个ICMP数据字节。
-w deadline
指定ping退出之前的超时(以秒为单位),无论已发送或接收了多少数据包。在这种情况下,ping在发送计数数据包后不会停止,它会等待截止时间到期或直到应答计数探测或来自网络的某些错误通知。
-W timeout
等待响应的时间,以秒为单位。该选项仅影响任何响应的超时,否则ping等待两个RTT。
所以我们有:
ping -c 1 -s 1 -W 1 4.2.2.2 1>/dev/null 2>&1 #The fast way to ping
#OR : nmap -sP 1 4.2.2.2 1 1>/dev/null 2>&1 #The fastest way to ping
if [ $? -eq 0 ]; then
date >> /var/log/ping_SLA_Fail
rc-service openvpn stop
killall -9 openvpn
rc-service openvpn start
sleep 30
elif [ $? -ne 0 ]; then
.
.
.
fi
答案 1 :(得分:2)
我不熟悉ping的任何-w
选项。
使用ping命令的-c
选项来确定要发送的ICMP回应请求的数量。
这样的事情应该有效:
if ! ping -c 5 4.2.2.2 &> /dev/null; then
date >> /var/log/ping_SLA_Fail
rc-service openvpn stop
killall -9 openvpn
rc-service openvpn start
fi
sleep 60
答案 2 :(得分:1)
您必须运行ping
命令,然后测试其退出值:
ping -w 5 4.2.2.2 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Ping worked"
else
echo "Ping failed"
fi