Перезапуск программы при пропадании интернета.
Задача такая: Есть коннект менеджер для 4G интернета, но у него нет функции авто-переподключения при обрыве связи.
Есть такой скрипт: Работает, но если был дисконект во время таймаута 120с то срабатывает как и положено. А если дисконект был во время комманды проверки (ping) то программа перезапускается моментально, т.е сначала скрипт пытается запустить еще 1 копию программы не завершая предыдущую. После ошибки программы "programm is running" скрипт останавливается. |
Попробуйте:
Код:
|
|
Это у Freshtel-а автоподключение к интернету при запуске менеджера.
|
А можно мне к темке примазаться? Как раз пытаюсь сделать подобное, только у меня сложнее... У меня перезапуск утилиты не спасает, нужно передергивать модем (такое впечатление, что он зависает). В принципе мой батник работает, но иногда, когда соединение зависает, ping.exe сносит крышу. Вместо ошибок пинга она выдает
C:\Users\admin>ping 8.8.8.8 C:\Users\admin>ping 8.8.8.8 C:\Users\admin>ping 8.8.8.8 C:\Users\admin>ping 8.8.8.8 ... и так до бесконечности. Как победить, пока не знаю. Код:
ping -n 1 8.8.8.8 |
Команда пинг и в правду иногда ведет себя подозрительно, но симитировать все ее ошибки не всегда получается.
Я смотрю Вы подряд пингуете несколько адресов... бывает что freshtel.ua не пингуется, а ukr.net работает? Могу посоветовать разве что найти какую-то другую методику проверки доступности инета или тот же пинг, но через другой интерфейс. Например, amel27 писал про WMI http://forum.oszone.net/post-1065308-8.html Попробуйте подставить туда Ваш код restart-а USB. |
Сохраните этот код в файл myping.vbs
Код:
iPing = Ping("www.google.com") Код:
@Echo Off |
Цитата:
Ближе чем ya.ru ничего не найти, IP провайдера странным образом ходит через германию.. Последние 2 скрипта я так понял перезапускает не менеджер, а драйвер модема? Пробую все предложенные варианты, позже отпишу результат. Вот как все печально, 1 хоп закрыт, 2 уже 178мс. Трассировка маршрута к ya.ru [77.88.21.3] с максимальным числом прыжков 30: 1 * * * Превышен интервал ожидания для запроса. 2 178 ms 119 ms 80 ms 10.0.0.5 3 65 ms 174 ms 111 ms msk-ix-m9.yandex.net [193.232.244.93] 4 80 ms 144 ms 139 ms 213.180.213.102 5 * * * Превышен интервал ожидания для запроса. 6 54 ms 109 ms 104 ms www.yandex.ru [77.88.21.3] Трассировка завершена. |
У меня, кстати, тоже Wimax от Альтернет (фрештел-а), только на выносной стац.антенне и модем под 220 В и по LAN-у подключается :)
Цитата:
Вам тоже подойдут эти 2 скрипта, если замените строки с "devcon" на свои "taskkill ..." P.S. Ну можно еще пробовать пинговать до yandex.net или напрямую на адрес 77.88.21.11 (выдал ping yandex.net), чтобы исключить ошибки DNS-сервера и т.п. задержки при переадресациях. |
Что то не то... Сделал так:
При пропадании интернета устройство отключается и больше не включается. Код:
@Echo Off В окне пишет это: USB\VID_1076&PID_7F00\72130202 : Disabled 1 device(s) disabled. В "процес експлорере" видно что скрипт зациклен на команде device Disabled |
Дак, я же писал
Цитата:
Цитата:
Код:
@Echo Off Также я делаю паузы, чтобы процесс успел выгрузится. И после запуска менеджера, чтобы он успел подключится перед следующей проверкой пинга. Если не успевает подключится в течении 4-5 сек., то значение "5" нужно увеличить здесь "ping -n 5 localhost >nul" |
Diskretor, Спасибо. Буду пробовать.
Цитата:
А на скриншоте выше его инженерное меню. |
Так мне вариант с перезапуском устройства тоже подошел бы. Коннект менеджер так хитро написан что автоматически подключается только при первом запуске или при отключении модема от порта или в устройствах. Вот я и пытался прикрутить "чужой" скрипт под себя, но что то никак.. останавливает но не запускает устройство.
Цитата:
|
Цитата:
Здесь слишком мало выставлено: Код:
"%SystemRoot%\system32\devcon.exe" disable USB\VID_1076* |
Цитата:
login "admin2" password "admin2" |
Diskretor,
Спасибо! vbs cкрипт работает, даже в том случае, когда ping.exe зависал. Но были замечены ложные срабатывания. Возможно из-за потерь пакетов. Что нужно дописать, чтобы скрипт возвращал ошибку после того как пропингует, например, 3 сайта по 10 пингов? Если ни один пинг не прошел, только тогда выполнить переподключение. И желательно пингивать 1 байтом.. Такая многоуровневая перестраховка нужна, так как когда канал загружен под завязку, то пинги почти не прорываются :) |
Да, если играть с параметром ping то вроде работает, думаю лучшего варианта не придумать..
В инженерном меню тоже стоит галка на "авто реконнект" но эффекта не дает почему то.. |
Инсульт, а у вас просто обрывы связи или сам модем подвисает? Когда связь пропала, можно подключиться через коннект менеджер, или нужно обязательно перетыкать модем?
|
Можно попробовать этим же скриптом с прописанными разными адресами в каждом из vbs файлов. Если при последовательном запуске переменная inet всегда будет == 1, то перезапустить менеджер.
|
Еще проблема образовалась... Когда канал загружен на 100% закачкой, то пинги не проходят. Совсем. Даже однобайтные.
В этом случае скрипт будет постоянно переподключать модем без толку. Может есть другой способ проверить наличие сети, кроме пинга? |
Теоретически "Сетевые виджеты" получают информацию о загруженности канала. Если бы можно было получать такую информацию посредством батника...
|
Может так-то можно по этим параметрам идентифицировать отсутствие сети?
Сеть есть и сети нет сооответственно: Код:
Настройка протокола IP для Windows Код:
Настройка протокола IP для Windows |
Цитата:
Не проще через WMI определять подключен адаптер к сети или нет? Вот как бы в скрипте увеличить время пинга ya.ru а то 4 запроса мало. Если и правда интернет временно затупил изза торрента или еще чего что бы не перезагружался зря. Как то все сложно выходит. Проще скрипт на autoit сделать что бы нажимал кнопку "подключиться" :) |
Цитата:
Кстати, винда сообщает, что соединение нерабочее, хотя коннект менеджер показывает противоположное. Вот по этому параметру можно было бы и запускать скрипт. UPD: вот скрипт, который, выдает статус адаптера. http://forum.oszone.net/post-1810790-86.html Переделать бы его.. |
Если Вам приемлимо использовать стороннее freeware ПО, то могу предложить еще способ с linux-утилитой wget, переписанной под Win:
Скачать Wget Она лишена недостатков со сбоями, как в Ping и может принимать самые различные ключи. Написал код, когда Wget делает 4 попытки по около ~5 сек. Если подключение удачно - идет таймаут 120 сек. и повторная проверка доступности узла Yandex.net (лучше указывать IP-адрес): Код:
@Echo Off Цитата:
Цитата:
YouHim, вот там, где Вы подчеркнули connected - Вы уверены, что при обрыве связи указанный скрипт 100% без ошибок меняет это значение на disconnected? Можно ввести дополнительную проверку: Перезапускать модем только, если одновременно выполняются два условия: 1) Не проходит ни один пинг 2) Network adapter выдает статус Disabled. Цитата:
Цитата:
|
Цитата:
Код:
strComputer = "." Diskretor, за wget, спасибо. Попробую и ее поковырять на досуге. |
Цитата:
|
Есть такая команда "netstat -s" если ее запустить дважды через секундный интервал, то имеем количество полученных за это небольшое время пакетов:
Алгоритм: 1) 5 последовательных Ping --> все fail AND Packets > 1000 - ничего не делаем (канал перегружен прогой Utorrent) 1) 5 последовательных Ping --> все fail AND Packets <= 50 - Restart Modem Есть только один недостаток, если у Вас несколько LAN-ов, или работает локальная сеть этот метод будет работать неправильно (а фильтра устройств в этой команде я не нашел). |
Цитата:
Предлагаю делать тщательный разбор того, что возвращает нам ping, а не слепо полагаться на %ErrorLevel% У меня это реализовано вот так: Код:
Ping -n 1 -w 1000 8.8.8.8|Find "TTL=">nul&&Echo Connected Код:
Ping -n 1 -w 1000 8.8.8.8|Find "TTL=">nul Ещё, как вариант - можно использовать GnuWin32 wget и тянуть google.com/favicon.ico, а затем проверять на наличие файла (ключами указать несколько попыток и достаточный таймаут) |
Цитата:
Anonymоus, Извиняюсь, но ничего не понял... Можно как для ламера разжевать? :) |
Т.е. он имел в виду, что иногда, даже если сайт не пингуется, команда пинг все равно выдаст успешный результат - и это приведет к перезапуску модема в написанных нами скриптах. Нужно все лишь добавить конец команды пинг это |Find "TTL="
Рассмотрим пример: 1) Ping выдает это: "Сбой команды ......." и передает, что завершено все без ошибок ---> скрипт перезагружает модем. Мы дописываем |Find "TTL=", и теперь уже проверяется успешность выполнения именно этой команды. Find ищет наличие строки "TTL=" в отчете, выданном предыдущей командой Знак | как раз его и передает. --> команда выполнится с ошибкой (строка "TTL="не найдена) ---> скрипт не будет пускать перезагрузку. Код:
>ping 8.8.8.8 Символ || - следующая за ним команда выполняется, если предыдущая (перед &&) выполнена с ошибкой (%errorlevel% <> 0) |
Опять прошу помощи!
Решил начать все сначала. Пишу скрипт, который пингует 3 хоста. Если все 3 не отвечают - перезагружает софт и модем. Столкнулся с одной проблемой. Если модем отсутствует, то скрипт выдает вот такую ошибку Код:
C:\Users\admin\AppData\Roaming\WMICodeCreator\MyWMIQuery_Script.vbs(20, 3) (null): 0x80041001 Код:
For Each objPing in colPings |
Вот так вроде работает как надо:
Код:
cmdow @ /HID |
2 Инсульт:
a) cmdow внешняя утилита, заметил позже б) Ping %Address% в цикле приводит к ненужному постоянному окну (в XP) в) нельзя ли вообще без :Loop - проверили и вышли, а повторный запуск через назначенные задания? |
Цитата:
в) В этом случае нужно делать планировщик, либо стороннее ПО, или воспользоваться встроенным в систему. |
Не поленился написал простенькую программку.
Запускает этот скрипт один раз в 5 минут, а не постоянно пингует. Скрипт будет работать в скрытом режиме (без окна) как и хотел mrjok Скрипт теперь должен быть такой: Код:
@Echo Off |
2 Инсульт:
1) спасибо 2) для devcon как уточнить, что USB\Class_0a |
то Инсульт:
Как прописать запуск скрипта в шедулер,планируется поместить шедулер в автозагрузку |
Доброго времени суток! Помогите с скриптом! Задача пинговать определенный адрес допустим 192.168.1.100 нужно послать 10 запросов эсли же на 10 запросов нет ответа перезагрузить сервер, если запросы в норме повторить процедуру через 10 минут!
Если конечно возможно то чтобы в момент перезапуска выскакивало окно комп будет перезагружен через 1 минуту, для отмены нажмите допустим "1" не нажал знач перезагруз. Очень прошу помогите! |
Цитата:
Цитата:
У меня вопрос другого плана, мне надо чтоб скрипт проверял как наличие интернета, так и работоспособность батника, который вызывает работу програмки, иногда эта програмка вылетает (или подвисает или просто вылетает, особенно когда нету интернета долгое время), и хотелось бы , чтоб скрипт перезапускал тот батник, котоырй вылетатет. То есть два условия проверки, 1 - интернет, 2- работает ли батник. Как убить процесс и как запустить, - это я логическим путем установил, а вот как сделать проверку программы ? Здесь мозгов не хватает. Работа программы заключаеться в том, что должен работать CMD , который связаный через интернет с сайтом. Если интернет пропадает, то CMD может "вылетить". |
ребята, есть варианты по моему вопросу ?
|
Время: 23:46. |
Время: 23:46.
© OSzone.net 2001-