我怎么能做一个shell脚本来知道我的连接是否在ubuntu上

时间:2009-07-22 10:15:01

标签: shell grep

我的shell脚本非常低..

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

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

然后拨打我的命令:

sudo pppd call speedtch

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

由于我的呼叫需要sudo,有一种批量方式可以在没有密码输入的情况下调用它吗?

2 个答案:

答案 0 :(得分:3)

ping运行正常,请使用以下命令行:

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

这使用以下命令行参数来ping:

  • -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:替换为您要执行的命令的路径

使用此配置,用户“fromuser”将始终能够执行/ usr / bin / mycommand而无需输入密码。出于安全原因,你当然要小心。

答案 1 :(得分: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