Linux 使用bash在网络关闭时自动重新启动Raspberry PI接口

Linux 使用bash在网络关闭时自动重新启动Raspberry PI接口,linux,bash,Linux,Bash,我有一个覆盆子圆周率,用作打卡机。 以太网接口每两小时到每两天关闭一次。 这是我们作为打卡机设置的第二个pi。在原来的一个,它使用无线和同样的问题发生在无线接口。有了wifi问题,您可以拔下usb wifi适配器并将其重新插入以对其进行排序。但是,我无法访问以太网插槽,并且我无法在新pi上打开pi外壳 计划是使用cron脚本每10分钟左右运行一次 因此,我求助于使用脚本重新启动接口。脚本的想法是ping网关。如果未收到响应,则pi应在接口eth0上运行IFDOWN和IFUP。如果失败,它应该重新

我有一个覆盆子圆周率,用作打卡机。
以太网接口每两小时到每两天关闭一次。
这是我们作为打卡机设置的第二个pi。在原来的一个,它使用无线和同样的问题发生在无线接口。有了wifi问题,您可以拔下usb wifi适配器并将其重新插入以对其进行排序。但是,我无法访问以太网插槽,并且我无法在新pi上打开pi外壳

计划是使用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

我知道这篇文章可能会被标记为重复文章,但我已经在stack exchange上尝试了很多不同的解决方案,没有一个对我有效

听起来@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

中指定,否则它会请求密码,而
sudo/sbin/ifdown eth0
sudo/sbin/ifup eth0
会按预期工作吗?我的建议是,您的脚本不会在root下运行,这些命令可能会请求密码密码。@andlrc Yes如果我运行sudo/sbin/ifdown eth0,它就会工作。手动运行脚本时,我没有权限错误。如果我没有放下/sbin/ifdown,那么当我运行它时脚本就不工作了。我收到错误报告。