2016-05-31 49 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文件

相关问题