У меня есть рабочий стол под управлением Ubuntu Gnome 16.04. При перезагрузке иногда (случайно) сетевая карта пропадает. То есть eth0 исчезает из ifconfig , lspci и т.д. Я не могу вернуть eth0 без перезагрузки в таких ситуациях. Обычно, когда это происходит, машина не подключается к Интернету. Кроме того, обычно, единственная перезагрузка решает проблему, и Ethernet снова появляется.

Я понятия не имею о том, как я могу начать отлаживать это. Тем не менее, я хотел бы иметь сценарий или службу, которая проверяет, был ли загружен Ethernet (компьютер подключен к Интернету), и перезагружается, если нет. Этот сценарий или служба должны быть запущены до того, как любой пользователь войдет в систему, потому что иногда я перезагружаю машину удаленно и теряю к ней доступ, если ethernet не запускается.

У меня есть скрипт, который проверяет, подключен ли интернет. Но мне не удалось заставить его работать в нужное время. Я пытался использовать crontab , но кажется, что cron инициализируется до подключения к Интернету (как записи в файле журнала); Я попытался поместить сценарий upstart в /etc/init/ , только чтобы понять, что Ubuntu теперь использует systemd и upstart больше не рекомендуется. Я также написал системный файл systemd и имел смешанные результаты (bootloop и ничего). Что я делаю неправильно?

Скрипт проверки интернет-соединения

#!/bin/bash

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

systemd файл блока , который вызвал bootloop

[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 ответ1

0

Эти два файла сделали свое дело:

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 времени ожидания подключения к сети . Тогда компьютер грубо перезагрузится.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .