2

Чтобы обойти некоторые проблемы с некоторыми ненадежными мобильными широкополосными соединениями 2G/3G, я хотел бы настроить автоматическую службу для принудительного перезапуска либо самого сетевого интерфейса, либо всего компьютера после того, как интернет-соединение не работает в течение определенного количества часов. , Это автоматизировало бы то, что мы до сих пор делали вручную для восстановления соединений.

Существует ли такая утилита для Windows 8, и если нет, то как я могу написать такую задачу?


Для некоторого контекста мы устанавливали набор компьютеров в недоступных местах в качестве средства удаленного мониторинга установок тестируемой системы. В любом случае, это обычные старые нетбуки с Windows 8, на которых запущена программа регистрации / конфигурирования, и обычно они подключаются через 2G / 3G ключи.

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

Справедливости ради следует отметить, что на рынке действительно имеются промышленные модемные / маршрутизаторные устройства, хотя разница в цене на порядок и тот факт, что системы уже установлены, заставляют меня искать простые решения.

Наконец, я не "суперпользователь", и это мой первый вопрос или какое-либо действие здесь, поэтому я прошу прощения, если это не по теме или на вопрос, на который уже дан ответ.

2 ответа2

2

Вы можете написать пакетный скрипт, который пингует некоторый веб-сайт, который почти никогда не отключается (Google!) и вы можете определить, работает ли ваш интернет с этим скриптом. Как только детектирующая часть готова, действительно легко перезагрузить компьютер или коммутируемое соединение из командного файла. Вот мой пример сценария:

@echo off
:begin
ping www.google.com | find "Reply" > nul
if errorlevel 1 goto :failed
goto :OK

:failed
echo Failed
choice /T 3600 /D Y /N
rasdial <dial-up connection name> <username> <password>
goto begin

:OK
echo OK
goto begin
0

Для записи вот сценарий, который я закончил после того, как возился с решением Тухачитья.

Он еще не был запущен в дикой природе, но, кажется, работает при тестировании. Я исправлю этот пост, как только он это сделает.

Теоретически потребление полосы пропускания от непрерывных пингов будет составлять примерно 1,5 ГБ / год, поэтому периодическое тестирование может быть предпочтительным. Однако мой провайдер утверждает, что он учитывает только фактические байты полезной нагрузки, и я надеюсь, что непрерывная активность может служить средством поддержки активности.

@echo off
set INTERFACE="Local Area Connection"
set TIMEOUT=3600
set IP=8.8.8.8
set LOG="watchdog.log"

echo %DATE% %TIME%: Watchdog started >> %LOG%

:loop
rem First check the interface for an hour by pinging the Google DNS
rem and resetting the networking interface if it should fail.
ping -n %TIMEOUT% -w 1000 -l 0 %IP%
if %errorlevel% NEQ 1 goto :loop
echo %DATE% %TIME%: Connection failed. Restarting interface.. >> %LOG%
netsh interface set interface %INTERFACE% disable
netsh interface set interface %INTERFACE% enable

rem Give it another shot but restart the whole computer if it the communication should still fail
ping -n %TIMEOUT% -w 1000 -l 0 %IP%
if %errorlevel% NEQ 1 goto :loop
echo %DATE% %TIME%: Still no connection. Restarting computer.. >> %LOG%
shutdown /r /c "Internet wathchdog"

echo %DATE% %TIME%: Waiting for system to shut down >> %LOG%
choice /T %TIMEOUT% /D Y /N > NUL
echo %DATE% %TIME%: Gave up on the shut down attempt. Trying again.. >> %LOG%
goto :loop

Обратите внимание, что перезапуск сетевого интерфейса требует прав администратора (любопытно, что перезагрузка компьютера не делает.)

Также имейте в виду, что для всех неотвечающих систем в той же подсети состояние выхода ping по-прежнему равно 0.

Мне было лень исследовать, как настроить правильного демона, поэтому я должен признаться, что запустил скрипт, создав ссылку на него в автозапуске, настроив учетную запись для автоматического входа в систему, пометив ссылку для запуска в качестве администратора, и отключение UAC.

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