我有一个运行 Ubuntu Gnome 16.04 的桌面。重启时,网卡有时会(随机)消失。也就是说,eth0
从ifconfig
、lspci
等处消失。在这种情况下,如果不重启,我无法恢复eth0
。当然,发生这种情况时,机器没有连接到互联网。而且,通常,一次重启就可以解决问题,以太网会再次出现。
我不知道如何开始调试。但是,我希望有一个脚本或服务来检查以太网是否已加载(计算机已连接到 Internet),如果没有,则重新启动。此脚本或服务应在任何用户登录之前运行,因为有时我会远程重新启动计算机,如果以太网没有启动,我将无法访问它。
我有一个脚本可以检查互联网是否已连接。但我一直无法让它在正确的时间运行。我尝试使用crontab
,但cron
似乎在互联网连接之前就已初始化(如日志文件所记录);我尝试在中放置一个 upstart 脚本/etc/init/
,结果发现 Ubuntu 现在使用systemd
upstart,并且不再推荐使用。我还编写了一个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
警告:用户可能在超时前仍能登录。然后计算机将突然重启。