2009-07-22 55 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