我试图让我的openvpn客户端重新启动,如果它不能ping通目标4.2.2.2每60秒,如果它然后什么都不做。 这是我的。 我也想继续运行。我正在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
男子平:
-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
您必须运行ping
命令,然后测试其退出值:
ping -w 5 4.2.2.2 > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Ping worked" else echo "Ping failed" fi