我试图使我的OpenVPN客户端重新启动,如果无法每60秒ping目标4.2.2.2 ping,如果它是什么都不做的。这是我拥有的。我也想连续运行。我正在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
我对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
man ping:
-c count
发送计数echo_request数据包后停止。有了截止日期选项,ping等待count echo_reply数据包,直到超时到期。
-s packetsize
指定要发送的数据字节数。默认值为56,与ICMP标头数据的8个字节组合时,它转化为64个ICMP数据字节。
-w deadline
在ping退出之前,指定超时,无论已发送或接收多少数据包。在这种情况下,ping在发送计数数据包后不会停止,它要么等待截止日期到期或直到回答计数探针或从网络上进行一些错误通知。
-W timeout
是时候在几秒钟内等待响应。该选项仅在没有任何响应的情况下仅影响超时,否则请等待两个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
您必须运行ping
命令,然后测试其退出值:
ping -w 5 4.2.2.2 > /dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo "Ping worked"
else
echo "Ping failed"
fi