2009-07-22 56 views
0

我非常低的shell脚本..我怎样才能做一个shell脚本,知道我连接了在Ubuntu

我需要检查一个cron(这个没问题)如果我的连接向上。如果不是,我想调用一些脚本来重新连接。

我正在考虑使用grep和ping到某个站点(或ip),然后检查返回的字符串。

然后打电话给我的命令:

sudo pppd call speedtch 

我需要一个线索的感谢!或者有更好的方法来做到这一点?

由于我的电话需要sudo,有没有密码输入的批处理方式来调用它?

回答

3

查验效果很好,使用此命令行:

if ping -W 5 -c 1 google.com >/dev/null; then 
    echo "Internet is up." 
fi 

这使用以下命令行参数平:

  • -W 5:超时等待五秒后的响应。
  • -c 1:只发送一个ping请求。大多数ping实现的默认设置是发送无限包。
  • 此外,ping的输出被重定向到/ dev/null,以避免来自cron的无用邮件。

至于你的sudo问题,你可以在sudoers文件中配置它。

在使用sudo的下面一行:

fromuser  ALL=(root) NOPASSWD: /usr/bin/mycommand 

你需要替换以下字符串:

  • FROMUSER:与谁运行的cronjob用户更换
  • 在/ usr/bin/mycommand:替换为您要执行的命令的路径

使用此c onfiguration用户“fromuser”将始终能够在不输入密码的情况下执行/ usr/bin/mycommand。出于安全原因,您当然要小心。

+0

你能解释一下我这个? ping -W 5 -c 1 google.com>/dev/null 谢谢! – apelliciari 2009-07-22 13:00:35

0

一个更快的(和被动的方式),如果你是从直接连接到互联网的测试中,是检查是否默认路由是存在:

 
netstat -rn | grep '^default' && echo connection is up || echo connection is down 

如果你想检查的错误级别的脚本:

 
#!/bin/sh 
netstat -rn | grep '^default' 
connected=$? 
if [ ! -z $connect ]; then 
    echo connected; 
fi 

,我个人做的另一件事,是等待的连接...

 
function wait_for_router() { 
    el=1 
    while [ -z $el ]; do 
     sleep 1 
     ping -c 1 $1 > /dev/null 2>&1 
     el=$? 
    done 
} 

如果您在另一个脚本此功能,您可以简单地这样做:

 
#!/bin/sh 
echo Waiting for connection... 
wait_for_router 192.168.1.1 
echo We have a connection... lets party