CMD/BAT - Перезапуск программы при пропадании интернета.

Аватара пользователя
Инсульт

CMD/BAT - Перезапуск программы при пропадании интернета.

Сообщение Инсульт »

Задача такая: Есть коннект менеджер для 4G интернета, но у него нет функции авто-переподключения при обрыве связи.



Есть такой скрипт:


читать дальше »




Код:

Код: Выделить всё

cmdow @ /HID
@echo off
cls
echo %date% - %time%: Connection checking... >>auto.log
set /a WaitTime=120*1
set Address=ya.ru
set /a conn_avail=-1
call :ping
exit
:ping
ping %Address% > Nul
if ERRORLEVEL 0 (
        if %conn_avail%==0 (
                set /a conn_avail=1
                echo %date% - %time%: Connection restored... >>auto.log
        )
)
if ERRORLEVEL 1 (
        if %conn_avail%==-1 (
                echo %date% - %time%: Disconnected! Reconnecting... >>auto.log
        )
        if %conn_avail%==0 (
                echo %date% - %time%: Unable to reconnect... >>auto.log
        )
        if %conn_avail%==1 (
                echo %date% - %time%: Disconnected! Reconnecting... >>auto.log
        )
        set /a conn_avail=0
        call :reboot
)
ping -n %WaitTime% 127.0.0.1 > Nul
call :ping
rem exit /b
:reboot
taskkill /f /im SW_WiMaxCM.exe > Nul
start /D "D:\4G\" SW_WiMaxCM.exe > Nul
exit /b







Работает, но если был дисконект во время таймаута 120с то срабатывает как и положено.

А если дисконект был во время комманды проверки (ping) то программа перезапускается моментально, т.е сначала скрипт пытается запустить еще 1 копию программы не завершая предыдущую. После ошибки программы "programm is running" скрипт останавливается.
Аватара пользователя
Dragokas

Re: CMD/BAT - Перезапуск программы при пропадании интернета.

Сообщение Dragokas »

Попробуйте:





Код:

Код: Выделить всё

cmdow @ /HID
@echo off
echo %date% - %time%: Connection checking... >>auto.log
set /a WaitTime=120*1
set Address=ya.ru
set /a conn_avail=1
:ping
ping -n 1 %Address% > Nul
if ERRORLEVEL 0 (
        if %conn_avail%==0 (
                set /a conn_avail=1
                echo %date% - %time%: Connection restored... >>auto.log
        )
)
if ERRORLEVEL 1 (
        if %conn_avail%==0 (
                echo %date% - %time%: Unable to reconnect... >>auto.log
        )
        if %conn_avail%==1 (
                echo %date% - %time%: Disconnected! Reconnecting... >>auto.log
        )
        set /a conn_avail=0
        call :reboot
        goto :ping
)
ping -n %WaitTime% 127.0.0.1 > Nul
goto :ping
:reboot
taskkill /f /t /im SW_WiMaxCM.exe > Nul
ping -n 3 127.0.0.1 > Nul
start /D "D:\4G\" SW_WiMaxCM.exe > Nul
exit /b

и лучше поменяйте ya.ru на ближайший веб-узел Вашего провайдера, или посмотрев командой tracert ya.ru
Аватара пользователя
Dragokas

Re: CMD/BAT - Перезапуск программы при пропадании интернета.

Сообщение Dragokas »

Похоже у вас Freshtel? Попробуйте поставить галочку в инженерном меню. Не факт, но возможно поможет.

Аватара пользователя
Dragokas

Re: CMD/BAT - Перезапуск программы при пропадании интернета.

Сообщение Dragokas »

Теоретически "Сетевые виджеты" получают информацию о загруженности канала. Если бы можно было получать такую информацию посредством батника...
Аватара пользователя
Dragokas

Re: CMD/BAT - Перезапуск программы при пропадании интернета.

Сообщение Dragokas »

Т.е. он имел в виду, что иногда, даже если сайт не пингуется, команда пинг все равно выдаст успешный результат - и это приведет к перезапуску модема в написанных нами скриптах. Нужно все лишь добавить конец команды пинг это |Find "TTL="

Рассмотрим пример:

1) Ping выдает это:

"Сбой команды ......."

и передает, что завершено все без ошибок ---> скрипт перезагружает модем.



Мы дописываем |Find "TTL=", и теперь уже проверяется успешность выполнения именно этой команды.

Find ищет наличие строки "TTL=" в отчете, выданном предыдущей командой



Знак | как раз его и передает.



--> команда выполнится с ошибкой (строка "TTL="не найдена) ---> скрипт не будет пускать перезагрузку.



Код:

Код: Выделить всё

>ping 8.8.8.8
Обмен пакетами с 8.8.8.8 по с 32 байтами данных:
Ответ от 8.8.8.8: число байт=32 время=64мс TTL=46
Ответ от 8.8.8.8: число байт=32 время=63мс TTL=46
...
>ping 8.8.8.8 | Find "TTL="&&echo Privet!
...
Privet!

Символ && - следующая за ним команда выполняется, если предыдущая (перед &&) выполнена без ошибок (%errorlevel% = 0)

Символ || - следующая за ним команда выполняется, если предыдущая (перед &&) выполнена с ошибкой (%errorlevel% 0)
Аватара пользователя
art_record_video@vk

Re: CMD/BAT - Перезапуск программы при пропадании интернета.

Сообщение art_record_video@vk »

Команда пинг и в правду иногда ведет себя подозрительно, но симитировать все ее ошибки не всегда получается.



Я смотрю Вы подряд пингуете несколько адресов... бывает что freshtel.ua не пингуется, а ukr.net работает?



Могу посоветовать разве что найти какую-то другую методику проверки доступности инета или тот же пинг, но через другой интерфейс.

Например, amel27 писал про WMI
VBS/WSH/JS - [решено] Проверка наличия соединения с интернетом (*.vbs)


Попробуйте подставить туда Ваш код restart-а USB.
Аватара пользователя
YouHim

Re: CMD/BAT - Перезапуск программы при пропадании интернета.

Сообщение YouHim »

Похоже у вас Freshtel? Попробуйте поставить галочку в инженерном меню. Не факт, но возможно поможет.

Аватара пользователя
YouHim

Re: CMD/BAT - Перезапуск программы при пропадании интернета.

Сообщение YouHim »

Цитата YouHim:



Похоже у вас Freshtel? Попробуйте поставить галочку в инженерном меню. Не факт, но возможно поможет.
CMD/BAT - Перезапуск программы при пропадании интернета.




Да, FreshTel но российский, и коннект менеджер не такой как на скриншоте. Вообще кривой самописный местными деревенскими программистами Изображение А какой у вас он? Может и на наш подойдет?

Ближе чем 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]



Трассировка завершена.
Аватара пользователя
Dragokas

Re: CMD/BAT - Перезапуск программы при пропадании интернета.

Сообщение Dragokas »

У меня, кстати, тоже Wimax от Альтернет (фрештел-а), только на выносной стац.антенне и модем под 220 В и по LAN-у подключается Изображение


Цитата Инсульт:



перезапускает не менеджер, а драйвер модема?
CMD/BAT - Перезапуск программы при пропадании интернета.




Да, там консольным диспетчером устройств отключается, подключается, а потом еще и обновляется USB-порт, на котором висит модем.

Вам тоже подойдут эти 2 скрипта, если замените строки с "devcon" на свои "taskkill ..."



P.S. Ну можно еще пробовать пинговать до yandex.net или напрямую на адрес 77.88.21.11 (выдал ping yandex.net), чтобы исключить ошибки DNS-сервера и т.п. задержки при переадресациях.
Аватара пользователя
Dragokas

Re: CMD/BAT - Перезапуск программы при пропадании интернета.

Сообщение Dragokas »

Что то не то... Сделал так:

При пропадании интернета устройство отключается и больше не включается.





Код:

Код: Выделить всё

@Echo Off
:ping
for /f %%a in ('cscript //nologo myping.vbs') do set inet=%%a 
if %inet% == 1 (
"%SystemRoot%\system32\devcon.exe" disable USB\VID_1076*
ping -n 1 localhost > nul
"%SystemRoot%\system32\devcon.exe" enable USB\VID_1076*
ping -n 4 localhost > nul
"%SystemRoot%\system32\devcon.exe" restart USB\VID_1076*
echo %date% %time% >> С:\clog.txt
ping -n 5 localhost >nul
) else ping -n 120 localhost >nul
goto :ping



В окне пишет это:

USB\VID_1076&PID_7F00\72130202 : Disabled

1 device(s) disabled.



В "процес експлорере" видно что скрипт зациклен на команде device Disabled
Ответить

Вернуться в «Скриптовые языки администрирования Windows»