如何在运行/etc/rc.local脚本之前检查Internet连接


8

我想将Raspberry Pi用作VPN网关。RPi通过wlan0, and插入的任何设备连接到我的家庭网络和互联网,eth0获得VPN连接。我pptp-linux用来建立VPN连接,在原型制作阶段一切正常。但是,为了完成项目,我将VPN连接放入/etc/rc.local脚本中,以便它将在启动时启动。现在,它有50%的时间失败了。我怀疑在通过正确连接到Internet之前,它正在尝试VPN连接wlan0。如果这是问题所在,则rc.local在继续执行脚本的其余部分之前,我需要先测试一个有效的Internet连接。关于如何执行此操作的任何想法?


您可以sleep 20在脚本之前添加一个。或者,最好将您的脚本放在中/etc/network/if-up.d。这样,一旦网络接口启动,脚本就会运行。
Gerben

Answers:



4

就在我的头顶上:

  1. ping您的路由器

  2. ping google.com

  3. ifconfig有效网关和/或有效IP地址的grep 输出


您需要对grepping进行有效回复。在一段时间内循环,直到满足所有条件。只是ping不会做很多事情。Jivings引用了不错的代码行。
Piotr Kula 2013年

@ppumkin无需使用grep,ping使用退出代码来告诉您有关结果的信息,例如ping -qc 1 192.168.1.1 && echo ok || echo error
lenik

4

基于Jivings示例代码和我自己的一些逻辑。

#!/bin/bash

STATE="error";

while [  $STATE == "error" ]; do
    #do a ping and check that its not a default message or change to grep for something else
    STATE=$(ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error)

    #sleep for 2 seconds and try again
    sleep 2
 done

#put your VPN code here...

正确的方法是创建一个在while比较器上返回布尔值的函数。但这就是外壳逻辑的样子。


1

Debian现在使用新贵。使用init.d脚本,这可能是一种更简单的方法。

您可能需要尝试一些其他服务来等待,但是networking(如果有)network-manager可能是个不错的选择。

这是针对Ubuntu的,但您不应发现太多差异http://upstart.ubuntu.com/cookbook/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.