Вы не упомянули операционную систему, но если вы используете 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. Если связь по-прежнему не восстановлена, тогда предпримите решительную меру полной перезагрузки.