当以太网无法随计算机启动时重新启动计算机

当以太网无法随计算机启动时重新启动计算机

我有一个运行 Ubuntu Gnome 16.04 的桌面。重启时,网卡有时会(随机)消失。也就是说,eth0ifconfiglspci等处消失。在这种情况下,如果不重启,我无法恢复eth0。当然,发生这种情况时,机器没有连接到互联网。而且,通常,一次重启就可以解决问题,以太网会再次出现。

我不知道如何开始调试。但是,我希望有一个脚本或服务来检查以太网是否已加载(计算机已连接到 Internet),如果没有,则重新启动。此脚本或服务应在任何用户登录之前运行,因为有时我会远程重新启动计算机,如果以太网没有启动,我将无法访问它。

我有一个脚本可以检查互联网是否已连接。但我一直无法让它在正确的时间运行。我尝试使用crontab,但cron似乎在互联网连接之前就已初始化(如日志文件所记录);我尝试在中放置一个 upstart 脚本/etc/init/,结果发现 Ubuntu 现在使用systemdupstart,并且不再推荐使用。我还编写了一个systemd单元文件,结果好坏参半(启动循环和什么都没有)。我做错了什么?

互联网连通性测试脚本

#!/bin/bash

ping -c 1 8.8.8.8 > /dev/null
if [ $? -eq 0 ]; then
  echo "ok"
else
  reboot
fi

systemd导致启动循环的单元文件

[Unit]
Description=Tests Internet connectivity. Reboots if not connected.
After=network.target syslog.target

[Service]
Type=forking
ExecStart=/usr/local/bin/internet_test.sh
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=InternetTest

[Install]
WantedBy=multi-user.target

systemd单元文件什么也没做(甚至服务也没有记录为已启动)

[Unit]
Description=Tests Internet connectivity. Reboots if not connected.
After=multi-user.target

[Service]
Type=forking
ExecStart=/usr/local/bin/internet_test.sh
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=InternetTest

答案1

这两个文件起了作用:

internet_test.sh(测试计算机是否在线)

#!/bin/bash

/usr/bin/nm-online -q --timeout=30

if [ $? -eq 0 ]; then
  echo "ok"
else
  reboot
fi

systemd单元文件

[Unit]
Description=Tests Internet connectivity. Reboots if not connected.
After=NetworkManager.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/internet_test.sh
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=InternetTest
RemainAfterExit=no

[Install]
WantedBy=multi-user.target

感谢文档和坚持。


nm-online警告:用户可能在超时前仍能登录。然后计算机将突然重启。

相关内容