2016-05-31 47 views
-1

我有一個樹莓派PI,用作機器中的時鐘。
以太網接口每隔幾個小時就會關閉幾天。
這是我們在機器中設置的第二個pi。在原來的那個,它使用無線和無線接口發生同樣的問題。隨着wifi的問題,你可以拔掉usb wifi適配器,並重新插入它進行排序。但是,我無法訪問以太網插槽,我無法在新的pi上打開pi盒。當網絡出現故障時,使用bash自動重新啓動樹莓派接口

計劃是使用腳本與cron運行每10分鐘左右。

因此,我訴諸用腳本重新啓動界面。腳本的想法是ping網關。如果沒有收到響應,那麼pi應該在接口eth0上運行IFDOWN,然後運行IFUP。如果失敗,它應該重新啓動。但是,我嘗試的每個腳本都失敗了。目前,我使用下面的腳本:

#!/bin/bash 
function pingf1 { 
ping1=$(ping -c 1 10.0.0.1) 
ping1result=$? 
echo $ping1result 
if [ $ping1result -eq 1 ] 
then 
sudo /sbin/ifdown eth0 #or wlan0 if using on old clocker 
sudo /sbin/ifup eth0 #or wlan0 if using on old clocker 
fi 
} 
pingf1 
exit 

我知道這個帖子可能會被標記爲重複的職位,但我已經嘗試了很多堆棧交換不同的解決方案已經,並沒有對已經工作我。

+0

是否'須藤/ sbin目錄/ ifdown你eth0'和'sudo/sbin/ifup eth0'按預期工作? – andlrc

+0

我的建議是,你的腳本不能在root下運行,這些命令可能會要求輸入密碼。 – andlrc

+0

@andlrc是的,如果我運行sudo/sbin/ifdown eth0它的作品。我手動運行腳本時沒有權限錯誤。如果我不把/ sbin/ifdown那麼腳本不起作用,當我運行它。我收到錯誤報告。 –

回答

1

像@andlrc這樣的聲音對於sudo來說是正確的,但是如果你從root用戶創建了cronjob,那麼你不需要sudo。

爲了簡單起見,在你的cronjob,而不是使用這個腳本:

#!/bin/bash 
if ! ping -q -c 1 192.168.1.121 &>/dev/null; then 
    /sbin/ifdown eth0 #or wlan0 if using on old clocker 
    /sbin/ifup eth0 #or wlan0 if using on old clocker 
fi 
exit 

在這裏,我們沒有使用上$?不必要的變量和檢查,因爲它可以在一個if語句來完成。

確保您的cronjob通過root身份運行,所以你不必包含sudo的,因爲默認情況下它要求輸入密碼,除非你在/ etc指定/ sudoers文件

相關問題