Reiniciando o computador quando a ethernet não inicia com o computador

0

Eu tenho um desktop rodando o Ubuntu Gnome 16.04. Na reinicialização, às vezes (aleatoriamente) a placa de rede desaparece. Ou seja, eth0 desaparece de ifconfig , lspci , etc. Não consigo trazer de volta eth0 sem uma reinicialização em tais situações. Na verdade, a máquina não está conectada à Internet quando isso acontece. Além disso, geralmente, uma única reinicialização corrige o problema e a Ethernet é exibida novamente.

Eu não tenho a menor ideia de como posso começar a depurar isso. No entanto, gostaria de ter um script ou serviço que verifique se a ethernet foi carregada (o computador está conectado à Internet) e reinicialize se não estiver. Esse script ou serviço deve ser executado antes que qualquer usuário faça o login, porque, às vezes, eu reinicio a máquina remotamente e perco o acesso a ela se a ethernet não aparecer.

Eu tenho um script que verifica se a Internet está conectada. Mas não tive sucesso em fazê-lo funcionar na hora certa. Eu tentei usar crontab , mas cron parece ser inicializado antes de a internet se conectar, (como o arquivo de log registra); Eu tentei colocar um script upstart em /etc/init/ , apenas para perceber que o Ubuntu agora usa systemd e upstart não é mais recomendado. Também escrevi um arquivo systemd unit e tive resultados mistos (bootloop e nada). O que estou fazendo errado?

Script de teste de conectividade da Internet

#!/bin/bash

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

systemd arquivo de unidade que causou 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 arquivo de unidade que não fez nada (até mesmo o serviço não registrou como iniciado)

[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
    
por Kartik 26.10.2017 / 03:57

1 resposta

0

Esses dois arquivos fizeram o truque:

internet_test.sh (testa se o computador está online)

#!/bin/bash

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

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

systemd arquivo de unidade

[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

Graças à documentação e perseverança.

Aviso: o usuário ainda pode fazer login antes de nm-online expirar. Em seguida, o computador irá reiniciar rudemente.

    
por 26.10.2017 / 06:17