5

У меня есть старый рабочий стол, который я использую как веб-сервер из моего дома, пока я учусь в колледже. Интернет дома дерьмовый, и во многих случаях, когда он выходит из строя, рабочий стол не может подключиться без перезагрузки.

Есть ли способ сделать скрипт, который загружается при запуске и каждые 12 часов или около того, будет пытаться пропинговать маршрутизатор, и, если он не работает, перезагружает сервер?

РЕДАКТИРОВАТЬ: Хорошо, я смог сделать этот сценарий после немного погуглил.

#!/bin/bash

ping -c 1 192.168.1.1 > /dev/null
if [ $? -ne 0 ]; then
  reboot
fi

Это проверяет, успешен ли пинг, а если нет, то перезагружается.
Теперь, что мне нужно сделать, чтобы запустить его по заданному расписанию?

1 ответ1

5

Вы не упомянули операционную систему, но если вы используете Windows, может пригодиться что-то вроде этого: JScript для Ping, Renew IP и Network Info / Repair.

Это сценарий, который я собрал для аналогичной проблемы. Он делает в точности то, что вы ищете, он проверяет шлюз по умолчанию (который будет вашим маршрутизатором) по заданному расписанию, а затем предпринимает необходимые действия в случае сбоя проверки связи.

В этом случае проблемные ПК не нужно было перезагружать, а просто запрограммировали сценарии ipconfig /release и ipconfig /renew для восстановления соединения. Нечто подобное может хорошо подойти и для вашего случая. Если по-прежнему требуется полная перезагрузка, этот сценарий можно легко изменить, чтобы учесть это.

Для Linux вы можете использовать скрипт оболочки следующим образом:

#!/bin/sh

ping -c5 192.168.1.1

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

Это работает из-за кода возврата ping , как подробно описано на странице man:

Если ping вообще не получает ответных пакетов, он завершается с кодом 1. Если указано количество пакетов и крайний срок, и к моменту наступления крайнего срока получено меньше пакетов, чем количество пакетов, он также завершится с кодом 1. При другой ошибке он выходит с кодом 2. В противном случае он выходит с кодом 0. Это позволяет использовать код выхода, чтобы увидеть, жив хост или нет.

После замены 192.168.1.1 на адрес вашего маршрутизатора вы можете запланировать его запуск каждый час или около того, используя cron. Для того, чтобы перезагрузить компьютер, вам нужно запустить его как root . Для Ubuntu по умолчанию вы можете добавить задание cron, используя:

sudo crontab -e

Чтобы эта проверка выполнялась каждый час, например:

00 * * * * /path/to/script/pingRouterCheckReboot.sh

Вам нужно убедиться, что скрипт является исполняемым (chmod +x).

Если вы обнаружите, что выключения и резервного копирования интерфейса достаточно, вы можете сделать это вместо этого, выполнив что-то вроде ifdown eth0; ifup eth0 . Или объедините подходы: сначала сделайте это, а затем снова выполните тест ping. Если связь по-прежнему не восстановлена, тогда предпримите решительную меру полной перезагрузки.

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